1

我有两个精灵,一个“轨道”并跟随另一个。我已经开始工作了,所以一条鱼会跟随屏幕周围的气泡(它会朝该方向旋转并朝它移动)。这是关于它如何工作以及我想要发生的事情的图表:

在此处输入图像描述

我试图弄清楚如何将我的鱼“缓冲”到远离气泡中心的正确(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;
    }
}

任何想法或帮助表示赞赏。谢谢

4

2 回答 2

1

您已经在除零检查中找到了解决方案的种子。您希望鱼在更长的距离处停止移动,因此将条件更改为d。将您的第一个 if/else 替换为:

if (d > radiusOfBubblePlusRadiusOfFish){
    fish.position = ccp( fish.position.x + dx/d * v *dt, 
                           fish.position.y + dy/d * v *dt);
}

并保持其他一切不变。

于 2012-05-17T19:57:06.907 回答
0

不要将鱼的位置计算为鱼的中心,而是以嘴前的位置计算。

所以移动直到fish.position + offset = bubble.position。

于 2012-05-17T19:33:56.473 回答