2012-07-02 2 views
-1

Я использую AndEngine, чтобы сделать игру, и я понятия не имею, почему я получаю эту ошибку. Казалось, что это работает раньше, и я не уверен, какие изменения кода вызвали ошибку. У кого-нибудь есть идеи?Почему я получаю arrayindexoutofboundsexception?

07-02 01:34:44.747: E/AndroidRuntime(19252): java.lang.ArrayIndexOutOfBoundsException 
07-02 01:34:44.747: E/AndroidRuntime(19252): at com.prattia.webs.testgfx5.TestGFX5Activity$2.onAreaTouched(TestGFX5Activity.java:249) 
07-02 01:34:44.747: E/AndroidRuntime(19252): at org.andengine.entity.scene.Scene.onAreaTouchEvent(Scene.java:409) 
07-02 01:34:44.747: E/AndroidRuntime(19252): at org.andengine.entity.scene.Scene.onSceneTouchEvent(Scene.java:328) 
07-02 01:34:44.747: E/AndroidRuntime(19252): at org.andengine.engine.Engine.onTouchScene(Engine.java:452) 
07-02 01:34:44.747: E/AndroidRuntime(19252): at org.andengine.engine.Engine.onTouchEvent(Engine.java:438) 
07-02 01:34:44.747: E/AndroidRuntime(19252): at org.andengine.input.touch.controller.BaseTouchController$TouchEventRunnablePoolItem.run(BaseTouchController.java:102) 
07-02 01:34:44.747: E/AndroidRuntime(19252): at org.andengine.util.adt.pool.RunnablePoolUpdateHandler.onHandlePoolItem(RunnablePoolUpdateHandler.java:54) 
07-02 01:34:44.747: E/AndroidRuntime(19252): at org.andengine.util.adt.pool.RunnablePoolUpdateHandler.onHandlePoolItem(RunnablePoolUpdateHandler.java:1) 
07-02 01:34:44.747: E/AndroidRuntime(19252): at org.andengine.util.adt.pool.PoolUpdateHandler.onUpdate(PoolUpdateHandler.java:88) 
07-02 01:34:44.747: E/AndroidRuntime(19252): at org.andengine.input.touch.controller.BaseTouchController.onUpdate(BaseTouchController.java:62) 
07-02 01:34:44.747: E/AndroidRuntime(19252): at org.andengine.engine.Engine.onUpdate(Engine.java:584) 
07-02 01:34:44.747: E/AndroidRuntime(19252): at org.andengine.engine.Engine.onTickUpdate(Engine.java:548) 
07-02 01:34:44.747: E/AndroidRuntime(19252): at org.andengine.engine.Engine$UpdateThread.run(Engine.java:820) 

И та часть моего кода:

private void createFiller(float x, float y) { 
     fillerNum++; 
     Log.e("Creating Filler",Integer.toString(fillerNum)); 
     filler[fillerNum].active=true; 
     filler[fillerNum].sprite = new Sprite(x-fillerTR.getWidth()/2,y - fillerTR.getHeight()/2,fillerTR,getVertexBufferObjectManager()) 
     { 
      @Override 
      public boolean onAreaTouched(TouchEvent pSceneTouchEvent, float pTouchAreaLocalX, float pTouchAreaLocalY){ 
       if(pSceneTouchEvent.isActionMove()){ 
        setPosition(pSceneTouchEvent.getX() - getWidth()/2, pSceneTouchEvent.getY() - getHeight()/2); 
       } 
       if(pSceneTouchEvent.isActionUp()){ 
        Log.e("Action Up",Integer.toString(fillerNum)); 
        if(!filler[fillerNum].body.getUserData().equals("destroyed"))//Line 249 
         createStationaryFiller(); 
       } 
       return true; 
      } 
     }; 

     scene.registerTouchArea(filler[fillerNum].sprite); 

     filler[fillerNum].body = PhysicsFactory.createCircleBody(mPhysicsWorld, filler[fillerNum].sprite, BodyType.DynamicBody, FIXTURE_DEF); 
     filler[fillerNum].body.setUserData("fill"); 
     mPhysicsWorld.registerPhysicsConnector(new PhysicsConnector(filler[fillerNum].sprite, filler[fillerNum].body, true, true)); 
     scene.attachChild(filler[fillerNum].sprite); 
    } 

Если есть какие-либо другие объяснения или код нужен, дайте мне знать, и я могу отправить его. Я в тупике!

+0

Согласно описанию ошибки вы получаете доступ к элементу массива в * index *, значение которого равно или равно или больше длины массива. – adatapost

+1

Я думаю, 'fillerNum' больше или равно' filler.length'. –

+1

"private void createFiller (float x, float y) {fillerNum ++;" увеличивая счетчик в начале метода? Мне кажется проблематичным. Но, не видя остальной части кода для этой области, можно только догадываться ... – Guardanis

ответ

0

Номера строк были бы хороши, но я подозреваю, что fillerNum больше, чем размер вашего массива наполнителей. В любом случае, ваша трассировка стека говорит, что исключение выбрано в строке 249, поэтому найдите эту строку, и вы найдете свою проблему :)

+0

Отмечена строка 249. – rphello101

+0

так что да, точно так же, как Гарри Джой и я указали, размер вашего массива, вероятно, меньше, чем 'fillerNum'. –

Смежные вопросы