我正在使用Cocos2D和Kobold2D制作游戏。在我的游戏中,我有一艘船,我想移动到玩家点击的位置,使用以下代码:
KKInput * input = [KKInput sharedInput];
CGPoint tap = [input locationOfAnyTouchInPhase:KKTouchPhaseBegan];
if (tap.x != 0 && tap.y != 0)
{
[ship stopAllActions]; // Nullifies previous actions
int addedx = tap.x - ship.position.x;
int addedy = tap.y - ship.position.y;
int squaredx = pow(addedx, 2);
int squaredy = pow(addedy, 2);
int addedSquares = squaredx + squaredy;
int distance = pow(addedSquares, 0.5);
[ship runAction: [CCMoveTo actionWithDuration:distance/100 position:tap]];//makes ship move at a constant speed
}
船舶通常会按照我的预期移动。但是,如果我在船的附近轻敲,而不是平稳地移动到水龙头位置,它会跳到那个位置。我该如何解决这个问题?
答案 0 :(得分:0)
首先,您可以使用cocos2d的ccpDistance
函数来计算两点之间的距离。
并且它会跳跃,因为如果你太靠近距离太小,假设2 or 10 ...
你将它划分为100
例如5/100 = 0.05
太低了,这就是它跳跃的原因。
您需要手动处理它我认为if(speed<1) speed++;
添加1
等速度。快捷方案解决方案:)
答案 1 :(得分:0)
你的逻辑是正确的,但你的计算缺乏精确性。 特别是当您将飞行时间计算为距离/ 100时。这意味着当距离<1时100结果是0,所以船只跳到目的地。
基本上,在处理cocos2d中的位置时,应该使用float而不是int。并且有几个函数可以很好地完成工作。
您可以将代码更改为:
[ship stopAllActions]; // Nullifies previous actions
float distance = ccpDistance(tap, ship.position);
[ship runAction: [CCMoveTo actionWithDuration:distance/100.0f position:tap]];