2013-10-05 37 views
1

我不知道爲什麼,但我的這部分代碼改變我的變量:toMovePositionAndEngine Vector2操作改變我的變量

bodyNpc.setLinearVelocity(toMovePosition.sub(bodyNpc.getPosition()).nor()); 

代碼:

private void createPhysics(final Camera camera, PhysicsWorld physicsWorld) { 
     // TODO Auto-generated method stub 
     bodyNpc = PhysicsFactory.createCircleBody(physicsWorld, this, BodyType.KinematicBody, PhysicsFactory.createFixtureDef(0, 0, 0)); 

     bodyNpc.setUserData("N" + ArrayPosition); 

     physicsWorld.registerPhysicsConnector(new PhysicsConnector(this, bodyNpc, true, false) 
     { 
      @Override 
      public void onUpdate(float pSecondsElapsed) 
      { 
       super.onUpdate(pSecondsElapsed); 

       if(toMovePosition != null){ //Si te on anar 
        bodyNpc.setLinearVelocity(toMovePosition.sub(bodyNpc.getPosition()).nor()); 
        Log.w("Npc", ""+toMovePosition); 
       } 
      } 
     }); 
    } 

變量:

public Body bodyNpc; 
private Vector2 toMovePosition; 

吸氣和吸氣器:

public void setToMovePosition(float px, float py){ 
    this.toMovePosition = new Vector2(px, py); 
} 

public Vector2 getToMovePosition(){ 
    return this.toMovePosition; 
} 

謝謝。

回答

1

sub(Vector2)nor()這兩種方法都會更改toMovePosition對象的值,如您在source中所看到的。

Vector2類有一個拷貝構造函數定義的,所以你可以只換toMovePosition這樣的 - bodyNpc.setLinearVelocity(new Vector2(toMovePosition).sub(bodyNpc.getPosition()).nor());
這將導致在未修改toMovePosition對象。