我有两个精灵,一个是“跟踪”,另一个跟着。我已经有了这个工作,所以鱼会跟随屏幕周围的气泡(它将朝着方向旋转并向它移动)。这是一个关于它如何工作以及我想要发生什么的图表:
我正在试图弄清楚如何从气泡中心“缓冲”我的鱼正确的(x,y),但我不确定如何。这是我的代码,它按计划运行(60 *秒):
- (void) nextFrame:(ccTime)dt {
float dx = bubble.position.x - fish.position.x;
float dy = bubble.position.y - fish.position.y;
float d = sqrt(dx*dx + dy*dy);
float v = 200;
if (d > 1){
fish.position = ccp( fish.position.x + dx/d * v *dt,
fish.position.y + dy/d * v *dt);
} else {
fish.position = ccp(bubble.position.x, bubble.position.y);
}
float angle = CC_RADIANS_TO_DEGREES(atan2f(dx, dy));
angle -= 90;
fish.rotation = angle;
if(bubble.position.x < fish.position.x){
fish.flipY = YES;
} else {
fish.flipY = NO;
}
}
任何想法或帮助表示赞赏。感谢
答案 0 :(得分:1)
你已经在零分检查中获得了解决方案的种子。您希望鱼在更远的距离停止移动,因此请更改d
上的条件。将第一个if / else替换为:
if (d > radiusOfBubblePlusRadiusOfFish){
fish.position = ccp( fish.position.x + dx/d * v *dt,
fish.position.y + dy/d * v *dt);
}
并保持其他一切。
答案 1 :(得分:0)
不要将鱼的位置计算为鱼的中心,而应将鱼的位置计算在嘴前。
所以移动直到fish.position + offset = bubble.position。