0

画面上のオブジェクトを追跡して追跡し、それらに向かって移動するスプライトがあります。

メソッドはスケジュールに従って実行され、基本的に次のようになります。

- (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 を超えると、魚はその距離に向かって泳ぎます。

問題は、オブジェクトに物理特性があるため、画面上でスライドすることです。これにより、魚のスプライトにジギング/よろめき効果が生じます。これは、魚がバブルに到達すると停止しますが、バブルが (d > 190) のように段階的に離れていくにつれて、揺れて急速に停止するためです。

このジギング効果を取り除くにはどうすればよいですか? 魚が泡の位置に到達したら、魚の動きを止めたいだけです。またはそれを滑らかにする代替手段。助けていただければ幸いです。

4

1 に答える 1

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

}
于 2012-05-27T20:14:29.310 に答える