cocos2dx用物理场景移动精灵

时间:2015-01-03 05:41:29

标签: cocos2d-x game-physics ccsprite

我有一个带物理的场景初始化,我有一个带有物理体的角色精灵,然后我有一个带有物理体的静态地面精灵。这一切都很好,所以我的下一步是移动我的角色。现在我假设如果我刚刚更新了我的角色X位置,那么角色会移动并留在地上但是如果地面掉落,角色不会掉落它只是漂浮,我如何移动我的角色精灵并让它留在地上每时每刻?我的更新功能的代码在

下面
void LevelOne::update(float delta)
{
    if (mJoystick->isActive())
    {
        Vec2 scaledVelocity = mJoystick->getVelocity() * 240;
        Vec2 updatedPosition = Vec2(mCharacter->getPosition().x + scaledVelocity.x 
                                    * delta, mCharacter->getPosition().y);

    mCharacter->setPosition(updatedPosition);

    if (mJoystick->getVelocity().x < 0)
    {
        mCharacter->setFlippedX(false);
    }
    else
    {
        mCharacter->setFlippedX(true);
    }
}

1 个答案:

答案 0 :(得分:0)

以下步骤可以解决您的问题 -

1)你是否将重力设置为像重力。设(0.0f,-10.0f),y应为负数。

2)设置Character Sprite是动态的。

3)代码应该是更新方法。

    int32 velocityIterations = 1;
    int32 positionIterations = 1;
    world -> Step(dt, velocityIterations, positionIterations);
    for (b2Body* b = world -> GetBodyList(); b; b = b -> GetNext()) {
        if (b -> GetUserData() != NULL) {
            CCSprite *myActor = (CCSprite*) b -> GetUserData();
            if(myActor != NULL) {
                myActor->setPositionY( b -> GetPosition().y * PTM_RATIO);
                myActor->setRotation(-1 * CC_RADIANS_TO_DEGREES(b -> GetAngle()));
            }

        }
    }