identified multi touch pointer in action_move

倖福魔咒の 提交于 2019-12-11 06:54:30

问题


i am a student developing an air hockey android games. i am having a problem with understanding multi touch. i just learns about ACTION_DOWN, ACTION_POINTER_DOWN etc.

but by problem is at ACTION_MOVE. i create 2 sprite for 2 player.1st sprite will move where my 1st finger go, but my 2nd sprite doesn't move where my 2nd finger move.

my question is, how i want to identified which finger is moving in ACTION_MOVE? i have tried to use getPointerId(index), but i am not understand how to use it because the index is changing if the 1st finger leave the screen

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:


You cannot know which area will be touched first. The first finger/ touch gets pointer id = 0 the second = 1 and so on. What you can do is this:

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


来源:https://stackoverflow.com/questions/10054065/identified-multi-touch-pointer-in-action-move

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!