0

画面上に 2 つのコントロール スティック (円) がある 2D アクション シューティング ゲームのシンプルな Android ゲームを作成しようとしています。左は移動コントロール、右は武器コントロールです。方向は、円の中心に対する親指の位置によって制御されています。

私はこのサイトのチュートリアルに従っています: http://www.kilobolt.com/day-7-creating-an-android-game-from-start-to-finish.htmlしかし、それは私に基礎を与えただけでした取り組む。私はプログラミングの経験がないので、今はかなり迷っています。

私は TOUCH_DOWN イベントでのみ動作する動きを得ました。ヒーローは本来あるべき場所に移動しますが、方向を変えるには、親指を持ち上げて円に再度触れる必要があります。TOUCH_DRAGGED (または ACTION_MOVE) が壊れているのは、円を横切って指をドラッグすると、キャラクターが非常に速く動くためです。問題は処理されるタッチ イベントが多すぎることだと思いますが、それを修正する方法がわかりません。

親指を円の周りにドラッグすると、ヒーローが即座に方向を変え、速度を常に一定に保つように、これを変更するにはどうすればよいですか? また、タッチする円の中心からどれだけ近くても遠くても、速度は同じでなければなりません。

private void updateRunning(List<TouchEvent> touchEvents, float deltaTime) {

    int len = touchEvents.size();

    for (int i = 0; i < len; i++) {
        TouchEvent event = touchEvents.get(i);  
        if (event.type == TouchEvent.TOUCH_DOWN || event.type == TouchEvent.TOUCH_DRAGGED) {

            if (inBounds(event, 50, 300, 150, 150, 'c')) {
                ctrl.setX(event.x);
                ctrl.setY(event.y);
                ctrl.direction();
                hero.move(ctrl.getDirX(), ctrl.getDirY());
            }
        }

        if (event.type == TouchEvent.TOUCH_UP) {

            if (inBounds(event, 0, 0, 35, 35,'r')) {
                pause();
            }
            hero.stopMove();
        }   
    }

    hero.update();  

動き: hero.update() 呼び出しごとに、ヒーローの speedX と speedY がヒーローの centerX と centerY に追加されます。

public void move(float x, float y) {

    speedX += x * MOVESPEED;
    speedY += y * MOVESPEED;

}

x & y 速度を処理するこのメソッド。ここでstackoverflowで見つけました.touch_downイベントは正常に機能しているため、仕事をしていると思います。私はそれが本来あるべき姿ではないと感じていますが。L_STICK_C は、100 と 350 (円の中心) の値を持つ定数です。

public void direction() {

        dir.x = x - L_STICK_C.x;
        dir.y = y - L_STICK_C.y;
        double hyp = Math.sqrt(dir.x * dir.x + dir.y * dir.y);
        dir.x = (float) (dir.x / hyp);
        dir.y = (float) (dir.y / hyp);
}
4

1 に答える 1

1

ゲームプログラミングのチュートリアルを調べてみることをお勧めします。通常、タッチ入力から直接キャラクターを移動することはありません。親指入力の位置に対応するゲーム ループの 1 回、ゲーム状態変数を設定します。次に、これらの入力に基づいて、ゲーム ループごとに 1 回だけヒーローを更新します。これにより、ゲームの入力制御コードとヒーロー コードを分けておくことができ、ゲームの他の部分で再利用できるようになります。

編集:

コードに基づいて、指をドラッグするたびに、一連のドラッグ イベントが生成されます。したがって、イベントごとにキャラクターの速度を追加しています。おそらく、すべてではなく、最後のタッチイベントでの入力の中心までの距離と x / y だけを見ているは​​ずです。

于 2013-02-18T21:36:00.763 に答える