最值得赞赏的是一些帮助。基于从屏幕上的触摸给出的标题的精灵移动。 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_]];
答案 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_));