0

一些帮助将不胜感激。基于屏幕上触摸给出的标题的精灵移动。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_]];
4

2 回答 2

1

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

-(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,您唯一可以打赌的是它不会是恒定的;但物理学应该是正确的。

于 2013-02-17T22:58:55.527 回答
0

试试这个距离:

float distance = ccpLength(ccpSub(adjustedPosition, position_));
于 2013-02-17T00:35:37.937 回答