2015-02-11 163 views
0

我試圖從給定精靈的抽頭做出另一個從一個場景變化。要做到這一點,我創建了一個場景管理器(引許多AndEngine配方)有setCurrentScene方法。我首先進入一個啓動畫面,而不是菜單畫面,而不是第一個遊戲場景。這些場景之間的轉換是沒有問題做出,但是從第一場比賽的場景切換到下一個問題時開始發生。我得到的休耕消息:ArrayIndexOutOfBoundsException異常而改變場景

02-11 19:56:59.192: E/AndroidRuntime(777): FATAL EXCEPTION: UpdateThread 
02-11 19:56:59.192: E/AndroidRuntime(777): java.lang.ArrayIndexOutOfBoundsException: length=2; index=2 
02-11 19:56:59.192: E/AndroidRuntime(777):  at com.stockalley.resourcemanagers.PlaceResourceManager$1.onAreaTouched(PlaceResourceManager.java:125) 
02-11 19:56:59.192: E/AndroidRuntime(777):  at org.andengine.entity.scene.Scene.onAreaTouchEvent(Scene.java:409) 
02-11 19:56:59.192: E/AndroidRuntime(777):  at org.andengine.entity.scene.Scene.onSceneTouchEvent(Scene.java:357) 
02-11 19:56:59.192: E/AndroidRuntime(777):  at org.andengine.engine.Engine.onTouchScene(Engine.java:452) 
02-11 19:56:59.192: E/AndroidRuntime(777):  at org.andengine.engine.Engine.onTouchEvent(Engine.java:438) 
02-11 19:56:59.192: E/AndroidRuntime(777):  at org.andengine.input.touch.controller.BaseTouchController$TouchEventRunnablePoolItem.run(BaseTouchController.java:102) 
02-11 19:56:59.192: E/AndroidRuntime(777):  at org.andengine.util.adt.pool.RunnablePoolUpdateHandler.onHandlePoolItem(RunnablePoolUpdateHandler.java:54) 
02-11 19:56:59.192: E/AndroidRuntime(777):  at org.andengine.util.adt.pool.RunnablePoolUpdateHandler.onHandlePoolItem(RunnablePoolUpdateHandler.java:1) 
02-11 19:56:59.192: E/AndroidRuntime(777):  at org.andengine.util.adt.pool.PoolUpdateHandler.onUpdate(PoolUpdateHandler.java:88) 
02-11 19:56:59.192: E/AndroidRuntime(777):  at org.andengine.input.touch.controller.BaseTouchController.onUpdate(BaseTouchController.java:62) 
02-11 19:56:59.192: E/AndroidRuntime(777):  at org.andengine.engine.Engine.onUpdate(Engine.java:584) 
02-11 19:56:59.192: E/AndroidRuntime(777):  at org.andengine.engine.Engine.onTickUpdate(Engine.java:548) 
02-11 19:56:59.192: E/AndroidRuntime(777):  at org.andengine.engine.Engine$UpdateThread.run(Engine.java:820) 

這是精靈的代碼來改變形象:

textBox.sprite = new StockSprite(textBox.sprite.getX(), textBox.sprite.getY(), 
       sm.engine.getSurfaceWidth(), 
       textBox.sprite.getHeight(), 
       textBox.region, sm.engine.getVertexBufferObjectManager()) { 

     @Override 
     public boolean onAreaTouched(TouchEvent pSceneTouchEvent, float x, float y){ 
       if (pSceneTouchEvent.isActionDown()){ 
         if (lineCounter == 2 || !puttingText){ 
           // If the changeScene boolean is activated we should change the scene 
           if (changeScene) { 
             // We call the scene manager method to do it 
             sm.setCurrentScene(newScene); 
           } 

           // If we got to the lineCounter to the max we wait until the 
           // player touchs the screen 
           if (lineCounter >= lines.length || !puttingText){ 
             lineCounter = 0; 
             line1.setText(""); 
             line2.setText(""); 

             if (!puttingText) { 
               // We should make he disappear 
               dem.reset(); 
               sequence[k].mImage.sprite.clearEntityModifiers(); 
               sequence[k].mImage.sprite.registerEntityModifier(dem); 
             } 
           } 
         } 
       } 
       return super.onAreaTouched(pSceneTouchEvent, x, y); 
     } 
}; 

這是seCurrentScene方法

public void setCurrentScene(AllScenes currentScene){ 
       // Change the current scene 
       this.currentScene = currentScene; 
       switch(currentScene) { 
         case SPLASH: 
           break; 
         case MAINMENU: 
           // Set the scene to be the main menu 
           mmrm = new MainMenuResourceManager(this); 
           break; 
         case NEWGAME: 
           // Load the new game resource 
           hrm = new HouseResourceManager(this, true); 
           break; 
         case LOADGAME: 
           break; 
         case NEWSPAPER: 
           nprm = new NewspaperResourceManager(this); 
           break; 
         default: 
           break; 
       } 
     } 

場面到的過渡正在做這是

public class NewspaperResourceManager { 
     private SceneManager sm; 
     private Font cFont; 
     private Text line1; 
     private Scene nScene; 
     public NewspaperResourceManager(SceneManager s) { 
       sm = s; 
       loadFont(); 
       loadText(); 
       nScene = new Scene(); 
       nScene.setBackground(new Background(1,1,1)); 
       nScene.attachChild(line1); 
       sm.engine.setScene(nScene); 

     } 

     private void loadText() { 
       // TODO Auto-generated method stub 
       line1 = new Text(0.3f*sm.engine.getSurfaceWidth(), sm.engine.getSurfaceHeight()/2, 
           cFont, "Please Ivan-san make the images!", 48, sm.engine.getVertexBufferObjectManager()); 
     } 

     public void loadFont() { 
       // Set the font for the character 
       cFont = FontFactory.create(
         sm.engine.getFontManager(), 
         sm.engine.getTextureManager(), 
         256, 
         256, 
         Typeface.create(Typeface.DEFAULT, Typeface.NORMAL), 
         32f*((float)sm.engine.getSurfaceWidth()/800), 
         true); 
       cFont.prepareLetters("abcdefghijklmnopqrstuvwxyz!?-".toCharArray()); 
       cFont.load(); 
     } 
} 

回答

2
sequence[k].mImage.sprite.clearEntityModifiers(); 
sequence[k].mImage.sprite.registerEntityModifier(dem); 

我不知道k從哪裏來,但按摩稱長度爲2,因此索引爲0和1.在您正在處理觸摸輸入並且K在索引2上得到3的情況下。 索引2不存在所以它會拋出一個索引超出界限。

+0

如果解決這個問題,我會下跌像一個完整的白癡 – 2015-02-11 23:04:53

+0

我是個白癡。謝謝 – 2015-02-12 00:59:26

+0

沒問題,你是不是隻是錯過了一些白癡。任何人都可能遇到 – 2015-02-12 09:03:40

相關問題