2012-11-11 30 views
1

我是Android遊戲開發新手,我使用的是AndEngine GLES 2 Java。我得到一個錯誤,就是我的數組(face1)有一個非法索引。我無法解決問題,所以我需要一些幫助。 代碼:Andengine Sprite的數組錯誤

@Override 
public Scene onCreateScene() { 
    this.mEngine.registerUpdateHandler(new FPSLogger()); 

    final Scene scene = new Scene(); 
    scene.setBackground(new Background(0.09804f, 0.6274f, 0.8784f)); 
    final float centerX1 = 400; 
    final float centerY1 = 50; 
    final Sprite[] face1 = new Sprite[i]; 
    face1[i] = new Sprite(centerX1, centerY1, this.m2FaceTextureRegion, this.getVertexBufferObjectManager()); 
    final float centerX = (CAMERA_WIDTH - this.mFaceTextureRegion.getWidth())/2; 
    final float centerY = (CAMERA_HEIGHT - this.mFaceTextureRegion.getHeight())/2; 
    final Sprite face = new Sprite(centerX, centerY, this.mFaceTextureRegion, this.getVertexBufferObjectManager()) { 
     @Override 
     public boolean onAreaTouched(final TouchEvent pSceneTouchEvent, final float pTouchAreaLocalX, final float pTouchAreaLocalY) { 

      if(!face1[i].collidesWith(this)) 
      { 
       x+=1; 
      this.setPosition(x, 50); 
      } 
      else 
      { 
       x=60; 
       this.setPosition(x, 50); 
      } 
      return true; 
     } 
    }; 

    scene.attachChild(face); 
    scene.registerTouchArea(face); 
    scene.setTouchAreaBindingOnActionDownEnabled(true); 
    face.setScale(4); 
    scene.attachChild(face1[i]); 
    face1[i].setScale(2); 


    return scene; 
} 

的錯誤:

11-11 12:12:42.690: E/AndEngine(13291): java.lang.ArrayIndexOutOfBoundsException 

感謝。

+0

請張貼從logcat的完整堆棧跟蹤.. –

+0

的大小/長度你可以在這裏看到。 http://82.11.64.84/ –

回答

0

從日誌看來,異常正在上升到com.example.sheeprun1.BaseActivity.onCreateScene(BaseActivity.java:89)。你能檢查這一行的代碼以及在那裏執行的是什麼陣列操作...

EDIT1:當你在創建數組final Sprite[] face1 = new Sprite[i];的時候i的值不應該爲零。

當你訪問該數組中的值總是檢查指標是小於陣列

if(face!=null && i<face.length){ 
face1[i] = new Sprite(centerX1, centerY1, this.m2FaceTextureRegion, this.getVertexBufferObjectManager()); 
} 
+0

這是第89行:\t \t face1 [i] =新的Sprite(centerX1,centerY1,this.m2FaceTextureRegion,this.getVertexBufferObjectManager()); –

+0

您可以在使用日誌記錄或調試器的此行之前檢查'i'的值和麪陣列的長度嗎? –

+0

public static int i = 1; –