CCMoveTo持续时间/速度问题

时间:2013-02-16 22:40:31

标签: objective-c cocos2d-iphone game-physics

最值得赞赏的是一些帮助。基于从屏幕上的触摸给出的标题的精灵移动。 Sprite按预期移动,但无论我使用currentSpeed的值是什么,我都无法改变速度。这是精灵的更新方法。提前谢谢。

    // Distance between two points (Distance formula, Pythagorean Theorem c^2=a^2+b^2, so d=sqrt((x2-x1)^2+(y2-y1)^2)
    // Duration (time = distance / rate)

    CGPoint adjustedPosition;
    adjustedPosition.x = position_.x - sinf(heading);
    adjustedPosition.y = position_.y - cosf(heading);

    float distance = CGPointDistanceBetweenTwoPoints(adjustedPosition, position_);
    float duration = distance / currentSpeed;

    position_ = adjustedPosition;

    [self runAction:[CCMoveTo actionWithDuration:duration position:position_]];

2 个答案:

答案 0 :(得分:1)

不要使用moveto或更新方法中的任何操作。相反,计算位置,如下所示:

-(void) update:(ccTime) dt {

    // _velocity in points per second.
    // heading should be in ccw notation, 0 on x axis, RHS

    float deltaX = dt * _velocity * cosf(heading);
    float deltaY = dt * _velocity * sinf(heading);
    CGPoint adjustedPosition = ccpAdd(self.position, ccp(deltaX,deltaY));
    self.position = adjustedPosition;
}

或类似的东西。这将缓解任何方差id dt,你唯一可以打赌的是它不会是恒定的;但物理学应该是正确的。

答案 1 :(得分:0)

试试这个距离:

float distance = ccpLength(ccpSub(adjustedPosition, position_));