Cocos2d iphone 如何以恒定速度移动具有动态物理体的精灵

Cocos2d iphone 如何以恒定速度移动具有动态物理体的精灵,cocos2d-iphone,position,physics,spritebuilder,Cocos2d Iphone,Position,Physics,Spritebuilder,直到最近,每次更新我都会改变精灵的x坐标,我对此很满意。但昨天在debugDraw模式下,我发现在一定速度后,物理体不会与精灵正确对齐,如下所示: 后来,我在cocos2d论坛上被Birkemose告知,将物理体从a移动到B的首选方法是对其施加脉冲。但我不知道如何通过这种方式实现恒速。这是我用来在不施加任何脉冲的情况下移动它的代码: -(void)update:(CCTime)delta{ rollingHero.position=ccp(rollingHero.position.x+s

直到最近,每次更新我都会改变精灵的x坐标,我对此很满意。但昨天在debugDraw模式下,我发现在一定速度后,物理体不会与精灵正确对齐,如下所示: 后来,我在cocos2d论坛上被Birkemose告知,将物理体从a移动到B的首选方法是对其施加脉冲。但我不知道如何通过这种方式实现恒速。这是我用来在不施加任何脉冲的情况下移动它的代码:

-(void)update:(CCTime)delta{
    rollingHero.position=ccp(rollingHero.position.x+scrollSpeed*delta,    
                         rollingHero.position.y);
    physicsNode.position=ccp(physicsNode.position.x-scrollSpeed*delta,
                         physicsNode.position.y);
}
因此,为了创造一种移动的感觉,我以相同的滚动速度向相反的方向滚动物理节点和英雄。
我尝试了很多不同的应用冲动的方法,但我从来没有让它以恒定的速度运行。速度加快,英雄离开屏幕。如果有人能发布一个示例代码,我将不胜感激。

冲动不能让角色保持恒定速度的原因是因为冲动直接转化为动量的变化,从而转化为速度的变化。所以,如果你想通过脉冲来保持恒定的速度,你必须先检查你的精灵的速度,虽然你可以非常接近恒定的速度,但它并不是真正恒定的

static const float kRollingHeroMoveSpeed     = 10.f;
static const float kRollingHeroAccelConstant = 10.f;

-(void)update:(CCTime)delta {

    // check velocity of sprite
    if(_rollingHero.physicsBody.velocity.x < kRollingHeroMoveSpeed) {

        // if velocity is under limit, push character
        [_rollingHero.physicsBody applyImpulse:ccp(kRollingHeroAccelConstant, 0)];
    }
}

.

冲动无法使角色保持恒定速度的原因是冲动直接转化为动量的变化,从而转化为速度的变化。所以,如果你想通过脉冲来保持恒定的速度,你必须先检查你的精灵的速度,虽然你可以非常接近恒定的速度,但它并不是真正恒定的

static const float kRollingHeroMoveSpeed     = 10.f;
static const float kRollingHeroAccelConstant = 10.f;

-(void)update:(CCTime)delta {

    // check velocity of sprite
    if(_rollingHero.physicsBody.velocity.x < kRollingHeroMoveSpeed) {

        // if velocity is under limit, push character
        [_rollingHero.physicsBody applyImpulse:ccp(kRollingHeroAccelConstant, 0)];
    }
}

.

谢谢你的完美详细回答谢谢你的完美详细回答