2014-02-12 55 views
0

我有一个实体从右向左移动,我想重用它,所以我希望实体在离开屏幕时出现在屏幕的右侧。移动实体离开屏幕后

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 

所以无视我:(

任何帮助,这

的实体动力学,以防万一它有助于

回答

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); 
      } 
     } 
1

当你使用body的时候你不能使用sprite的方法。主体控制精灵的位置。尝试将新位置应用于身体。 Protip:如果将来遇到类似的问题(并且你没有使用物理),你可以在你的精灵中使用MoveModifier和LoopModifier。