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();
}
}
如果解決這個問題,我會下跌像一個完整的白癡 – 2015-02-11 23:04:53
我是個白癡。謝謝 – 2015-02-12 00:59:26
沒問題,你是不是隻是錯過了一些白癡。任何人都可能遇到 – 2015-02-12 09:03:40