当前位置: 动力学知识库 > 问答 > 编程问答 >

random - How do I make a Box2D wrap around world?

问题描述:

I want to make a wrap around game effect where an object would go off the screen from the x-axis one side and reappear in a new y-axis position on the other side of the screen. The width is 250 pixels, so basically it would pass (0, y1) and would reappear at (300, y2).

 a.applyForceToCenter(aMovement, true);

a.applyTorque(3000, true);

FixtureDef fDef = new FixtureDef();

BodyDef ballD = new BodyDef();

ballD.type = BodyType.DynamicBody;

//random location for asteroid

int aLoc = (int) (aLocation * 15);

float x = 300;

switch(aLoc)

{

case 0:

ballD.position.set(x, -105);

break;

case 1:

ballD.position.set(x, -95);

break;

case 2:

ballD.position.set(x, -80);

break;

case 3:

ballD.position.set(x, -65);

break;

case 4:

ballD.position.set(x, -50);

break;

case 5:

ballD.position.set(x, -35);

break;

case 6:

ballD.position.set(x, -20);

break;

case 7:

ballD.position.set(x, -5);

break;

case 8:

ballD.position.set(x, 10);

break;

case 9:

ballD.position.set(x, 25);

break;

case 10:

ballD.position.set(x, 40);

break;

case 11:

ballD.position.set(x, 55);

break;

case 12:

ballD.position.set(x, 70);

break;

case 13:

ballD.position.set(x, 85);

break;

default:

ballD.position.set(x, 0);

}

PolygonShape asteroid = new PolygonShape();

asteroid.setAsBox(12.5f, 12.5f);

//asteroid definition

fDef.shape = asteroid;

fDef.density = .5f;

fDef.friction = .25f;

fDef.restitution = .75f;

a = world.createBody(ballD);

a.createFixture(fDef);

a.setFixedRotation(false);

//asteroid image

aSprite = new Sprite(new Texture("img/asteroid-icon.png"));

aSprite.setSize(12.5f * 4, 12.5f * 4);

aSprite.setOrigin(aSprite.getWidth() / 2, aSprite.getHeight() / 2);

a.setUserData(aSprite);

asteroid.dispose();

网友答案:

You could use the setTransform() method on the ball if it leaves the screen on one side. Basically, after each simulation step you'd check if the ball has been moved out on one side, then setTransform() with the new position and rotation.

网友答案:

It might be possible to use a mod operator on your x and y positions. The idea being that you could mod whatever your x position and y position are with the pixel value of your box. That way when your x value = maxWidth, it becomes zero, and same for the y value.

分享给朋友:
您可能感兴趣的文章:
随机阅读: