我有一个实体从右向左移动,我想重复使用它,所以我希望实体在离开屏幕时出现在屏幕右侧。
physicsWorld.registerPhysicsConnector(new PhysicsConnector(this, body, true, false)
{
@Override
public void onUpdate(float pSecondsElapsed)
{
super.onUpdate(pSecondsElapsed);
if (GameScene.isRunning)
body.setLinearVelocity(new Vector2(-100, body.getLinearVelocity().y));
Log.d("TAG","MY X IS: " + getX());
if (getX() <= -100) {
Log.d("TAG","I SHOULD RESPAWN");
setPosition(800, 100);
}
}
});
日志:
02-12 20:14:36.059: D/TAG(9293): MY X IS: 179.99994
02-12 20:14:36.069: D/TAG(9293): MY X IS: 126.6666
02-12 20:14:36.089: D/TAG(9293): MY X IS: 73.33327
02-12 20:14:36.109: D/TAG(9293): MY X IS: 19.999931
02-12 20:14:36.119: D/TAG(9293): MY X IS: -33.333405
02-12 20:14:36.139: D/TAG(9293): MY X IS: -86.66674
02-12 20:14:36.159: D/TAG(9293): MY X IS: -140.00008
02-12 20:14:36.159: D/TAG(9293): I SHOULD RESPAWN
02-12 20:14:36.169: D/TAG(9293): MY X IS: -193.3334
02-12 20:14:36.169: D/TAG(9293): I SHOULD RESPAWN
02-12 20:14:36.189: D/TAG(9293): MY X IS: -246.66675
02-12 20:14:36.189: D/TAG(9293): I SHOULD RESPAWN
02-12 20:14:36.209: D/TAG(9293): MY X IS: -300.0001
02-12 20:14:36.209: D/TAG(9293): I SHOULD RESPAWN
所以它忽略了我:(
对此有何帮助?
该实体是Kinetic,以防它有帮助
答案 0 :(得分:1)
使用正文时,不能使用精灵中的方法。 Body控制精灵的位置。尝试将新位置应用于身体。
Protip:如果你将来遇到类似的问题(并且你没有使用物理学),你可以使用MoveModifier和LoopModifier和你的精灵。
答案 1 :(得分:0)
固定。 SetPosition设置实体的位置,但是主体仍由物理控制,所以你必须使用setTransform
@Override
public void onUpdate(float pSecondsElapsed)
{
super.onUpdate(pSecondsElapsed);
if (GameScene.isRunning)
body.setLinearVelocity(new Vector2(-8, body.getLinearVelocity().y));
Log.d("TAG","MY X IS: " + getX());
if (getX() <= -100) {
Log.d("TAG","I SHOULD RESPAWN");
final float widthD2 = getWidth() / 2;
final float heightD2 = getHeight() / 2;
final float angle = body.getAngle(); // keeps the body angle
final Vector2 v2 = Vector2Pool.obtain((500 + widthD2) / PIXEL_TO_METER_RATIO_DEFAULT, (50 + heightD2) / PIXEL_TO_METER_RATIO_DEFAULT);
body.setTransform(v2, angle);
Vector2Pool.recycle(v2);
setPosition(500 + widthD2,50+ heightD2);
}
}