AndEngine unregisterTouchArea(this)抛出outOfBoundException

时间:2014-02-02 15:52:39

标签: touch andengine area

当我尝试通过触摸来取消注册触摸区域时,它会抛出异常。

这是我的代码:

        Rectangle a = new Rectangle(500, 500, 200, 200, getVertexBufferObjectManager()){
        @Override
        public boolean onAreaTouched(TouchEvent pSceneTouchEvent,
                float pTouchAreaLocalX, float pTouchAreaLocalY) {
            // TODO Auto-generated method stub
            if(pSceneTouchEvent.isActionUp()){
                System.out.println("bum");
                TestScene.this.unregisterTouchArea(this);
            }
            return super
                    .onAreaTouched(pSceneTouchEvent, pTouchAreaLocalX, pTouchAreaLocalY);
        }
    };

    this.attachChild(a);
    this.registerTouchArea(a);

这是例外,它引发了我:

02-02 16:05:52.241: W/dalvikvm(28930): threadid=11: thread exiting with uncaught exception (group=0x415bcba8)
02-02 16:05:52.241: E/AndroidRuntime(28930): FATAL EXCEPTION: UpdateThread
02-02 16:05:52.241: E/AndroidRuntime(28930): Process: com.example.testing, PID: 28930
02-02 16:05:52.241: E/AndroidRuntime(28930): java.lang.IndexOutOfBoundsException:     Invalid index 1, size is 1
02-02 16:05:52.241: E/AndroidRuntime(28930):    at java.util.ArrayList.throwIndexOutOfBoundsException(ArrayList.java:255)
02-02 16:05:52.241: E/AndroidRuntime(28930):    at java.util.ArrayList.get(ArrayList.java:308)
02-02 16:05:52.241: E/AndroidRuntime(28930):    at org.andengine.entity.scene.Scene.onSceneTouchEvent(Scene.java:354)
02-02 16:05:52.241: E/AndroidRuntime(28930):    at org.andengine.engine.Engine.onTouchScene(Engine.java:454)
02-02 16:05:52.241: E/AndroidRuntime(28930):    at org.andengine.engine.Engine.onTouchEvent(Engine.java:440)
02-02 16:05:52.241: E/AndroidRuntime(28930):    at org.andengine.input.touch.controller.BaseTouchController$TouchEventRunnablePoolItem.run(BaseTouchController.java:102)
02-02 16:05:52.241: E/AndroidRuntime(28930):    at     org.andengine.util.adt.pool.RunnablePoolUpdateHandler.onHandlePoolItem(RunnablePoolUpdateHandler.java:54)
02-02 16:05:52.241: E/AndroidRuntime(28930):    at org.andengine.util.adt.pool.RunnablePoolUpdateHandler.onHandlePoolItem(RunnablePoolUpdateHandler.java:1)
02-02 16:05:52.241: E/AndroidRuntime(28930):    at org.andengine.util.adt.pool.PoolUpdateHandler.onUpdate(PoolUpdateHandler.java:88)
02-02 16:05:52.241: E/AndroidRuntime(28930):    at org.andengine.input.touch.controller.BaseTouchController.onUpdate(BaseTouchController.java:62)
02-02 16:05:52.241: E/AndroidRuntime(28930):    at org.andengine.engine.Engine.onUpdate(Engine.java:588)
02-02 16:05:52.241: E/AndroidRuntime(28930):    at org.andengine.engine.Engine.onTickUpdate(Engine.java:552)
02-02 16:05:52.241: E/AndroidRuntime(28930):    at org.andengine.engine.Engine$UpdateThread.run(Engine.java:842)

我正在使用andEngine anchorcenter。 有人知道如何解决它吗? 感谢

1 个答案:

答案 0 :(得分:0)

boolean isTouchRegister = true;
Rectangle a = new Rectangle(500, 500, 200, 200, getVertexBufferObjectManager()){
        @Override
        public boolean onAreaTouched(TouchEvent pSceneTouchEvent,
                float pTouchAreaLocalX, float pTouchAreaLocalY) {
            // TODO Auto-generated method stub
            if(pSceneTouchEvent.isActionUp() && isTouchRegister){
                System.out.println("bum");
           //     TestScene.this.unregisterTouchArea(this);
                  isTouchRegister = false
            }
            return isTouchRegister;
        }
    };

this.attachChild(a);
this.registerTouchArea(a);