2012-05-27 30 views
0

我有一個跟蹤並跟隨屏幕上物體的精靈,向它們移動。Sprite因爲跟蹤而產生跳動效果

的方法運行的時間表,基本上是這樣的:

- (void) nextFrame:(ccTime)dt { 
    //calculate distance between the bubble and the fish 
    float dx = bubbleToChase.position.x - fish.position.x; 
    float dy = bubbleToChase.position.y - fish.position.y; 
    float d = sqrt(dx*dx + dy*dy); 
    float v = 400; 

    if (d > 190){ 
     NSLog(@"moving the fish!"); 
     fish.position = ccp(fish.position.x + dx/d * v *dt, 
          fish.position.y + dy/d * v *dt); 

    } 
} 

代碼工作得很好,當距離大於190種的魚會朝它遊。

問題是對象具有物理特性,所以它們在屏幕上滑動。這會對魚精靈產生跳躍/ stag effect的效果,因爲一旦魚到達氣泡,魚就會停止,但隨着氣泡逐漸消失(d> 190),隨後抖動並快速停止。

我該如何擺脫這種跳汰效應?我想阻止魚一旦到達泡沫的位置就移動。或者任何可以平滑的選擇。任何幫助表示感謝,謝謝。

+0

芝諾的箭頭。對於每一步,將魚的速度減半。 – Dtyree

+0

當你的距離達到時,你可以將魚瞄準另一個泡泡嗎?否則,當它在你的距離範圍內時,隨機的時間你可以「停放」魚,並在到期時追蹤.....取決於你「接觸」氣泡時你想要的行爲。 – Dtyree

+0

停泊魚可以工作。什麼是最好的方式來做到這一點? – user339946

回答

0
if (d > 190 && !fish.parked){ 
    NSLog(@"moving the fish!"); 
    fish.position = ccp(fish.position.x + dx/d * v *dt, 
         fish.position.y + dy/d * v *dt); 

}else{ 
    if(fish.parked){ 
    // what you want to do while parked 
    // just sit there, wander randomly, 
    // then unpark the fish... 
    if(unpark) 
     fish.parked=FALSE; 
    }else{ 
    fish.parked=TRUE; 
    // set variables for parked state. 
    } 

} 
+0

我想我可以使用這樣的東西!但是,您覺得我怎麼能延遲?一旦魚停放,我必須在3秒後告訴它停車。由於整個方法重複執行多次,所以我不能真正使用延遲選擇器。有任何想法嗎? – user339946

+0

存儲停放的時間,並在存儲的+延遲時間內停車。 – Dtyree