2012-07-02 2 views
-1

AndEngine을 사용하여 게임을 만들고 있는데 왜이 오류가 발생하는지 알 수 없습니다. 이전에 작동 한 것처럼 보였으므로 코드 변경으로 인해 오류가 발생했는지 확실하지 않습니다. 누구든지 아이디어가 있습니까?왜 내가 배열을 아웃 아웃 바운드로 보내야합니까?

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

줄 번호는 좋지만 필자 필자 배열이 필러 배열의 크기보다 큽니다. 어쨌든 스택 추적에서 249 행에 예외가 발생 했으므로 해당 행을 찾으십시오. 문제가 있음을 알 수 있습니다.

+0

라인 249가 표시됩니다. – rphello101

+0

그래, 해리 조이 (Harry Joy)와 마찬가지로 배열의 크기가 아마도 'fillerNum'보다 작을 것이라고 지적했다. –