多点触控代码不起作用

时间:2015-01-02 14:36:05

标签: java android

所以我在Android上玩游戏,它需要使用多点触控。我已经阅读了一些关于多点触控的教程,并尝试在我的游戏中使用它。 这是我的代码:

    public boolean onTouch(MotionEvent e) {
    int pointerCount = e.getPointerCount();

    for (int i = 0; i < pointerCount; i++) {
        int x = (int) e.getX(i);
        int y = (int) e.getY(i);
        int action = e.getActionMasked();

        for (int j = 0; j < object.size(); j++) {
            tempObject = object.get(j);
            if (tempObject.getId() == ObjectId.Player) {

                switch (action) {

                case MotionEvent.ACTION_UP:
                    if (moveLeft.contains(x, y)) {
                        tempObject.setMovingLeft(false);

                    }
                    if (moveRight.contains(x, y)) {
                        tempObject.setMovingRight(false);

                    }

                    break;
                case MotionEvent.ACTION_POINTER_UP:
                    if (moveLeft.contains(x, y)) {
                        tempObject.setMovingLeft(false);

                    }
                    if (moveRight.contains(x, y)) {
                        tempObject.setMovingRight(false);

                    }

                    break;

                case MotionEvent.ACTION_DOWN:
                    if (jump.contains(x, y)) {
                        if (tempObject.getVelY() == 0 && tempObject.isJumping() == false) {
                            tempObject.setVelY((float) -11.5);
                            tempObject.setJumping(true);
                        }
                    }
                    if (restart.contains(x, y)) {
                        restart();

                    }

                    break;
                case MotionEvent.ACTION_POINTER_DOWN:
                    if (jump.contains(x, y)) {
                        if (tempObject.getVelY() == 0 && tempObject.isJumping() == false) {
                            tempObject.setVelY((float) -11.5);
                            tempObject.setJumping(true);
                        }
                    }
                    if (restart.contains(x, y)) {
                        restart();

                    }

                    break;

                case MotionEvent.ACTION_MOVE:

                    if (moveLeft.contains(x, y)) {
                        tempObject.setMovingLeft(true);
                        tempObject.setMovingRight(false);

                    }
                    if (moveLeftExit.contains(x, y) && !moveLeft.contains(x, y)) {
                        tempObject.setMovingLeft(false);

                    }
                    if (moveRight.contains(x, y)) {
                        tempObject.setMovingRight(true);
                        tempObject.setMovingLeft(false);

                    }
                    if (moveRightExit.contains(x, y) && !moveRight.contains(x, y)) {
                        tempObject.setMovingRight(false);

                    }
                    break;
                }
            }
        }

    }
    return true;
}

编辑: 我混淆for循环变量时出错了,现在它没有崩溃,但触摸不起作用。

EDIT2: 我现在已经注意到多点触控可以工作了,但是当我按下不同于矩形的地方时,它会被触及......

EDIT3: 现在好处是多点触控工作,就像我可以按下两个按钮一样,他们都会做出反应。 不好的是,当我触摸一个不同的小地方时,他们会做出反应。 我希望你能从这张照片中理解:

enter image description here

黑色 - 假设触发触摸事件

黄色 - 触发触摸事件的位置。

谢谢!笑脸

2 个答案:

答案 0 :(得分:4)

这看起来很奇怪:

for (int j = 0; i < object.size(); j++) {

混合i和j ?这可能导致索引超出界限错误

答案 1 :(得分:0)

Exceptionn是由数组list.in引起的,你试图访问超出范围的索引。

java.lang.IndexOutOfBoundsException:索引83无效,大小为83