在两个精灵之间创建一个距离缓冲区

时间:2012-05-17 19:29:14

标签: iphone ios ipad cocos2d-iphone

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

enter image description here

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

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

2 个答案:

答案 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。