在action_move中识别出多点触控指针

时间:2012-04-07 11:30:11

标签: android multi-touch

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

但问题在于ACTION_MOVE。 我为2个玩家创建了2个精灵。第1个精灵会移动到我的第一个手指去的地方,但我的第二个精灵不会移动到我的第二个手指移动的位置。

我的问题是,我想如何确定哪个手指在ACTION_MOVE中移动?我试图使用getPointerId(索引),但我不明白如何使用它,因为如果第一根手指离开屏幕索引正在改变

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());
        }
}

}

1 个答案:

答案 0 :(得分: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;
}