2012-01-25 41 views
4

使用AndEngine,我試圖用加速度計移動一個精靈(球),該加速度計應該會彈出牆壁並撞上其他障礙物。AndEngine,使用Accelerometer和PhysicsWorld平滑移動雪碧

到目前爲止我找到了以下兩種方法。

public void onAccelerometerChanged(final AccelerometerData myAccelerometerData) { 
    mySprite.setPosition(mySprite.getX() + myAccelerometerData.getX(), mySprite.getY() + myAccelerometerData.getY()); 

} 

這工作非常順利,但只在非物理世界。 (即不會順利地反彈牆壁和其他障礙物)。

現在使用AndEngine提供的示例中的這種方法,該球具有良好的物理特性,但並不像我想的那樣流暢。

@Override 
    public void onAccelerometerChanged(final AccelerometerData pAccelerometerData) { 
      final Vector2 gravity = Vector2Pool.obtain(pAccelerometerData.getX(), pAccelerometerData.getY()); 
      this.mPhysicsWorld.setGravity(gravity); 
      Vector2Pool.recycle(gravity); 
    } 

我也試着與某些值,如2和5相乘pAccelerometerData,是的,它似乎更敏感,但也使得球移動速度快了很多,難以發揮。

爲了明確我的問題,我希望我的遊戲能夠像迷宮或反彈遊戲中的球一樣順暢。其中的球對加速度計更敏感。例如,如果你想在迷宮中突然停止一個移動的球,你可以使用和引擎例子中的以下代碼,它會繼續移動一段時間,就好像它正在一個無摩擦的世界中移動一樣。

無論如何,我可以讓它更像迷宮遊戲更敏感和更順暢嗎? https://market.android.com/details?id=se.illusionlabs.labyrinth.lite&hl=en

回答

3

你可以(如你試過)乘以pAccelerometerData,並添加一個阻尼項。所以球會更有反應,停止更快,並保持合理的速度。

阻尼是bodys的一個屬性。所以它會是這樣的

body.setLinearDamping(1.5f); 
+1

我試了一下,是的,精靈更敏感,並提供更好的控制。謝謝Zoleas –

+0

我也有同樣的問題。我應該在哪裏使用body.setLinearDamping(1.5f);這應該在非物理世界或物理世界中。 –

+1

它是一個物體,所以它在物理世界。將阻尼應用於移動物體的身體(球,角色...)。 – Zoleas