2012-05-17 59 views
1

我有兩個精靈,一個「跟蹤」,跟着另一個。我已經有了這個工作,所以魚會在屏幕周圍顯示一個泡泡(它會朝着方向旋轉並朝着它移動)。這裏有一個圖上它是如何工作的,什麼我希望發生的事情:在兩個精靈之間創建一個距離緩衝區

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; 
    } 
} 

任何意見或幫助表示讚賞。謝謝

+0

嘿,我可以問你用什麼來製作你的圖表嗎? – akuritsu

回答

1

您已經在零分檢查中得到了解決方案的種子。您希望魚在較長距離停止移動,因此請更改d的條件。將您的第一個if/else替換爲:

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

並保持其他所有內容相同。

+0

哇,我真的不知道我錯過了什麼,謝謝! – user339946

0

不要將魚的位置計算爲魚的中心,而要計算魚嘴的位置。

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