1
            if(sprite.status == 'moveBack')
            {
                var pointX:Number = mouseX + Math.cos(sprite.angle) * 100;
                var pointY:Number = mouseY + Math.sin(sprite.angle) * 100;
                dx = pointX - sprite.x
                dy = pointY - sprite.y;
                var angle:Number = Math.atan2(dy, dx);
                var dist:Number = Math.sqrt(dx * dx + dy * dy);
                if(dist < 1)
                {
                    sprite.status = 'free';
                }
                else
                {
                    sprite.x += Math.cos(angle) * 15;
                    sprite.y += Math.sin(angle) * 15;
                }
                trace(dist);
            }
sprite.angle += 0.05;

これはコードの短いスニペットです。ここでは、スプライト オブジェクトの 1 つが以前の位置に戻ってきています。彼が来るポイントは毎回移動しています。問題は次のとおりです。私の速度が 15 ピクセル/フレームあたり、そして私のムービークリップは彼が来る終点に近く、残りの距離は20です。私の速度が15の場合、20 -15 = 5、次に5 - 15 = -5ですが、ピタゴールの式を使用しています距離は常に正であるため、スプライトは距離 0 に到達して自由になることはできません。この状況で何ができますか?

4

2 に答える 2

0

移動するオブジェクトが減速してターゲット位置で停止する、より洗練された動作に興味がある場合は、ステアリング動作を使用することをお勧めします:http: //www.red3d.com/cwr/steer/gdc99/

この場合、あなたは到着行動を見ています。

于 2012-12-18T16:58:24.947 に答える
0

この状況で私が自分で行う傾向があるのは、残りの距離がすべてのステップの速度以下であるかどうかを確認することです. そうであれば、速度を残りの距離に設定します。

于 2012-12-16T09:49:07.713 に答える