0

似たような質問がたくさん見つかりましたが、私自身の問題に答えるものはありませんでした。それはおそらく非常に単純なことですが、遅れており、私には理解できません。私が取り組んでいる Android ゲームがあります。画面に触れると、その方向にスプライトが「発射」されます。ほとんどのコードは動作していますが、スプライトが発火して移動した後、タッチ ポイントに到達してから揺れるだけです。その角度で進み、最終的には跳ね返ってほしい...

これが私のコードです(重要な部分です):

List<TouchEvent> touchEvents = game.getInput().getTouchEvents();
        int len = touchEvents.size();

        for(int i = 0; i < len; i++) {
            TouchEvent event = touchEvents.get(i);                        
            if(event.type == TouchEvent.TOUCH_UP) {
                touchPoint.set(event.x, event.y);
                guiCam.touchToWorld(touchPoint);                               
            }
        }

        //Log.d("PANDAM", touchPoint.x + "|" + touchPoint.y);
        float speed = 112f;
        double theta = 180.0 / Math.PI * Math.atan2(panda_y - touchPoint.y, panda_x - touchPoint.x);
        Log.d("PANDAM", " > "+theta+" < ");

        movePanda(theta, speed, deltaTime);

そして「movePanda」メソッド:

    private void movePanda(double angle, float speed, float deltaTime)
{   
    panda_x += speed * Math.cos(angle)*deltaTime;
    panda_y += speed * Math.sin(angle)*deltaTime;       
}

私の質問は、どうすればパンダがタッチ ベクトルに沿って進み、元のタッチ ポイントに到達したときにスパズアウトしないようにするにはどうすればよいですか?

4

1 に答える 1

0

アニメーションの各ステップで角度を再計算しているように見えますが、実際には最初に動き始めたときの角度を覚えておく必要があります。元のタッチ ポイントを通過すると、角度が変化して反対方向を指すため、アニメーション ステップごとに角度を再計算すると角度が変化し、最終的には反対方向を指します。

于 2012-09-16T21:39:30.990 に答える