如何像马里奥游戏角色一样跳跃和动画身体?

时间:2013-05-30 13:27:17

标签: android andengine

我是'andengine'的新手,我开发了像'mario'这样的简单游戏,所以我想以适当的方式跳跃并移动这个角色。

请给我一些想法,我使用速度和冲动,但这不能正常工作。

2 个答案:

答案 0 :(得分:2)

AndEngineExamples项目包含几个与您的应用程序类似的示例游戏。 在深入研究代码之前,您可以先下载APK和tryout。

AndEngineExamples

答案 1 :(得分:1)

我是这样做的(我的Player类接口):

public void moveLeft() {
    Vector2 velocity = Vector2Pool.obtain(-speed, body.getLinearVelocity().y);
    body.setLinearVelocity(velocity);                   
    Vector2Pool.recycle(velocity);

    int offset = isInjured ? 4 : 0;     
    if (!isAnimationRunning()) {
        setCurrentTileIndex(2 + offset);
        animate(new long[]{200, 200}, 2 + offset, 3 + offset, 1, animationListener);    
    }
}

public void moveRight() {
    Vector2 velocity = Vector2Pool.obtain(speed, body.getLinearVelocity().y);
    body.setLinearVelocity(velocity);               
    Vector2Pool.recycle(velocity);  

    int offset = isInjured ? 4 : 0; 
    if (!isAnimationRunning()) {
        setCurrentTileIndex(0 + offset);
        animate(new long[]{200, 200}, 0 + offset, 1 + offset, 1, animationListener);        
    }
}

public void stop() {
    Vector2 velocity = Vector2Pool.obtain(0, body.getLinearVelocity().y);
    body.setLinearVelocity(velocity);                   
    Vector2Pool.recycle(velocity);

    stopAnimation();

    int offset = isInjured ? 4 : 0;
    if(getCurrentTileIndex() % 4 > 1 ) 
        setCurrentTileIndex(2 + offset);
    else 
        setCurrentTileIndex(0 + offset);
}

public void stopJump() {
    if(jumpsLeft > 0) {
        Vector2 velocity = Vector2Pool.obtain(body.getLinearVelocity().x, body.getLinearVelocity().y / 5);
        body.setLinearVelocity(velocity);                   
        Vector2Pool.recycle(velocity);  
    }
}

public void jump() {
    if(jumpsLeft > 0) {
        Vector2 impulse = Vector2Pool.obtain(0, body.getMass() * -12);
        body.applyLinearImpulse(impulse, body.getWorldCenter());                
        Vector2Pool.recycle(impulse);   
        jumpsLeft--;
    }
}

然后,我创建了左,右,跳等移动按钮。 在AreaTouched事件中,为了执行操作,我执行player.jump()。 为了采取行动,我做player.stopJump()。 move_left和move_right按钮的代码几乎相同。