【问题标题】:Body Adjustable Velocity AndEngine/Box2D车身可调速度和Engine/Box2D
【发布时间】:2013-02-18 01:24:16
【问题描述】:

我试图通过加速度计的移动来改变附着在矩形上的物理体的速度。我无法让身体改变速度,一旦设置它是永久属性吗?

这是在我的 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 对象是类中的全局变量,因此可以在两种方法中引用。我尝试在 Populatescene 中使用更新处理程序并在其中设置 ball.setLinearVelocity,但是结果相同。

基本上我的问题是:物体连接到物理世界后,它的速度可以改变吗?

【问题讨论】:

  • 不要从 AndEngine UpdateThread 以外的其他线程中弄乱物理世界!我不记得从哪个系统线程调用加速度计回调(UIThread,SensorThread??),但它不是 AndEngine UpdateThread,因此如果您不将该调用调度到 UpdateThread,您可能会遇到意外行为或崩溃。
  • 那我该怎么办?将加速度计变化存储在全局变量中并在 AndEngine UpdateThread 中使用该值?
  • 那个或runOnUpdateThread
  • 您有任何示例说明如何执行此操作吗?我无法理解如何以及何时使用某些 updateHandlers。感谢您的宝贵时间,非常感谢 AndEngine。太棒了!

标签: android box2d andengine


【解决方案1】:

通常在 Box2D 中,您不设置速度,而是对物体施加脉冲或力以使其加速或减速。
对于您上面描述的内容,您不应该使用 setLinearVelocity。尝试使用

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多