1

私は2つのスプライトを持っています。1つは「トラック」で、もう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 に答える