1

我是一名开发空气曲棍球安卓游戏的学生。我在理解多点触控方面遇到问题。我刚刚了解了 ACTION_DOWN、ACTION_POINTER_DOWN 等。

但问题在于 ACTION_MOVE。我为 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 第二个 = 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 回答