Cocos2d x cocos2dx使用物理场景移动精灵

Cocos2d x cocos2dx使用物理场景移动精灵,cocos2d-x,game-physics,ccsprite,Cocos2d X,Game Physics,Ccsprite,我有一个物理场景初始化,我有一个有物理体的角色精灵,然后我有一个有物理体的静态地面精灵。这一切都很好,所以我下一步就是移动我的角色。现在我假设如果我刚刚更新了我的角色X位置,角色将移动并停留在地面上,但是如果地面掉落,角色不会掉落,它只是漂浮,我如何移动我的角色精灵并让它始终停留在地面上?下面是我的更新功能的代码 void LevelOne::update(float delta) { if (mJoystick->isActive()) { Vec2 sc

我有一个物理场景初始化,我有一个有物理体的角色精灵,然后我有一个有物理体的静态地面精灵。这一切都很好,所以我下一步就是移动我的角色。现在我假设如果我刚刚更新了我的角色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);
    }
}
void LevelOne::更新(浮动增量)
{
如果(mJoystick->isActive())
{
Vec2 scaledVelocity=mJoystick->getVelocity()*240;
Vec2 updatedPosition=Vec2(mCharacter->getPosition().x+scaledVelocity.x
*增量,mCharacter->getPosition().y);
mCharacter->setPosition(updatedPosition);
如果(mJoystick->getVelocity().x<0)
{
mCharacter->setFlippedX(false);
}
其他的
{
mCharacter->setFlippedX(真);
}
}

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

1) 你有没有像重力一样设置重力。设置(0.0f,-10.0f),y应该是负数

2) 设置你的角色精灵是动态的

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()));
            }

        }
    }