2013-03-04 62 views
1

我試圖改變附加到加速度計移動矩形的物理物體的速度。我不能讓身體改變速度,它一旦設定就是永久的財產嗎?Body Adjustable Velocity AndEngine/Box2D

這是我populateScene:

rect = new Rectangle(220, -200, 24, 24, this.getVertexBufferObjectManager()); 
rect.setColor(Color.GREEN); 
mScene.attachChild(rect); 

ball = PhysicsFactory.createBoxBody(mPhysicsWorld, rect, BodyType.DynamicBody, droppingBoxDef); 

mPhysicsWorld.registerPhysicsConnector(new PhysicsConnector(
        rect, ball)); 

而這正是我試圖改變速度:

@Override 
    public void onAccelerationChanged(AccelerationData pAccelerationData) { 

     int accellerometerSpeedX = (int)pAccelerationData.getX(); 
     // accellerometerSpeedY = (int)pAccelerometerData.getY(); 
     //Log.v("Accelerometer X Y Z: ", ""+pAccelerationData); 

     ball.setLinearVelocity(accellerometerSpeedX, 0); 

    } 

沒有矩形上方的第二部分加載罰款,並有其物理體工作正確。它似乎消失,當我嘗試使用: ball.setLinearVelocity。

Body對象是類中的全局變量,所以它可以在兩種方法中引用。我曾嘗試在Populatecene中使用更新處理程序,並在其中設置了ball.setLinearVelocity,但是獲得了相同的結果。

本質上我的問題是:身體的速度可以改變後,它已經連接到物理世界?

+1

別惹從另一個線程比AndEngine UpdateThread的physicsworld!我無法記得哪個系統線程(UIThread,SensorThread?)調用了加速度計回調,但它不是AndEngine UpdateThread,因此如果您不將該調用發送到UpdateThread,您可能會收到意外的行爲或崩潰。 – 2013-03-12 04:46:39

+0

那我該怎麼辦?將加速計更改存儲在全局變量中並在AndEngine UpdateThread中使用該值? – 2013-03-12 16:51:57

+0

那或'runOnUpdateThread'。 – 2013-03-12 23:03:40

回答

2

典型地在Box2D中,您沒有設置虛擬度,而是將衝動或力量應用於物體以使其加速或減速。
對於上面描述的內容,您不應該使用setLinearVelocity。嘗試使用

ball.applyForce(new Vector2(accellerometerSpeedX, 0), ball.getWorldCenter()); 

boxBody.applyAngularImpulse(new Vector2(accellerometerSpeedX, 0));