Andengine PhysicsHandler让玩家看起来很迟钝

时间:2015-10-19 16:12:04

标签: java android andengine

嘿,我的问题是,在PhysicsHandler的onUpdate中,pSecondsElapsed经常从0.016跳到0.038,这使得玩家以如此大的步幅移动,看起来玩家会懈怠。 这里是来自onUpdate的importante代码:

@Override
protected void onUpdate(final float pSecondsElapsed, final IEntity pEntity) {
    if(this.mEnabled) {
        /* Apply linear acceleration. */
        final float accelerationX = this.mAccelerationX;
        final float accelerationY = this.mAccelerationY;
        if(accelerationX != 0 || accelerationY != 0) {
            this.mVelocityX += accelerationX * pSecondsElapsed;
            this.mVelocityY += accelerationY * pSecondsElapsed;
        }

        /* Apply angular velocity. */
        final float angularVelocity = this.mAngularVelocity;
        if(angularVelocity != 0) {
            pEntity.setRotation(pEntity.getRotation() + angularVelocity * pSecondsElapsed);
        }

        /* Apply linear velocity. */
        final float velocityX = this.mVelocityX;
        final float velocityY = this.mVelocityY;
        if(velocityX != 0 || velocityY != 0) {
            pEntity.setPosition(pEntity.getX() + velocityX * pSecondsElapsed, pEntity.getY() + velocityY * pSecondsElapsed);
        }
    }
}

btw我只使用线速度。有人有解决方案吗?谢谢你的帮助!

2 个答案:

答案 0 :(得分:0)

我继续查看了这个引擎的存储库,我找到了一个可能对你有帮助的课程。基本引擎类有一个名为Fixed Step Engine的扩展,它允许你控制每帧的增量时间,这可能值得尝试(如果你还没有),以获得更平滑的物理。

答案 1 :(得分:0)

与FixedStepPhysicsWorld结合使用,您将获得最佳结果,但是:有一个小错误"在FixedStepPhysicsWorld类中:

按如下方式更改onUpdate:

...
while(this.mSecondsElapsedAccumulator >= stepLength && stepsAllowed > 0) {
    world.step(stepLength, velocityIterations, positionIterations);
    this.mSecondsElapsedAccumulator -= stepLength;
    stepsAllowed--;
}

this.mPhysicsConnectorManager.onUpdate(pSecondsElapsed);

...
while(this.mSecondsElapsedAccumulator >= stepLength && stepsAllowed > 0) {
    world.step(stepLength, velocityIterations, positionIterations);
    this.mSecondsElapsedAccumulator -= stepLength;
    stepsAllowed--;
    this.mPhysicsConnectorManager.onUpdate(stepLength);
}

原始代码中的问题是在PhysicsWorld进行多个步骤(大多数情况)后,PhysicsConnectors会更新。我的代码修复了这个问题。每当UiThread绘制连接的实体时,它们总是处于连接体的位置。他们不会跳过物理步骤。

相关问题