1

私はエアホッケーのAndroidゲームを開発している学生です。マルチタッチの理解に問題があります。ACTION_DOWN、ACTION_POINTER_DOWNなどについて学びます。

しかし、問題はACTION_MOVEにあります。2人用に2つのスプライトを作成します。1つ目のスプライトは1つ目の指が移動する場所に移動しますが、2つ目のスプライトは2つ目の指が移動する場所に移動しません。

私の質問は、ACTION_MOVEでどの指が動いているかをどのように識別したいですか?getPointerId(index)を使おうとしましたが、人差し指が画面から離れると人差し指が変化するため、使い方がわかりません。

switch (action & MotionEvent.ACTION_MASK) {
    case MotionEvent.ACTION_DOWN: {
     break;
}
case MotionEvent.ACTION_POINTER_DOWN: {
    break;
}
case MotionEvent.ACTION_UP: {
     break;
}
case MotionEvent.ACTION_POINTER_UP: {
    break;
}
case MotionEvent.ACTION_MOVE: {
        if((int)event.getPointerId(index) == 0){     //i know this IF statement is wrong, what should i do?
         player1.setX((int)event.getX());   //player1 & player2 is a sprite object
         player1.setY((int)event.getY());
        }
        if((int)event.getPointerId(index) == 1){
         player1.setX((int)event.getX());
         player1.setY((int)event.getY());
        }
}

}

4

1 に答える 1

0

どの領域が最初に触れられるかを知ることはできません。人差し指/タッチはポインタID=0を取得します。2番目は1というように続きます。あなたができることはこれです:

public boolean onTouchEvent(MotionEvent event) {

    // If this does not work search for a way to get the screen width
    WindowManager wm = (WindowManager) ctx.getSystemService(Context.WINDOW_SERVICE);
    Display display = wm.getDefaultDisplay();

    int eventaction = event.getActionMasked();

    int num = event.getPointerCount();

    // For every touch
    for (int a = 0; a < num; a++) {

        int X = (int) event.getX(event.getPointerId(a));
        int Y = (int) event.getY(event.getPointerId(a));


        int allowed_touch_range = display.getWidth() / 2; // Your screen width divided by 2
        switch (eventaction) {

        case MotionEvent.ACTION_MOVE:

            // Left half of the screen
            if (X < allowed_touch_range) {
                              /* Player1 Move */
            }
            // Rigth half
            if (X > allowed_touch_range) {
                               /* Player2 Move */
            }

            break;

        }
    }

    return true;
}
于 2013-02-03T13:32:11.747 に答える