2014-11-07 1 views
-1

Некоторые пользователи слишком часто получают этот крах в моем приложении, разработанном в andengine. Я не снимаю/не прикрепляю какие-либо объекты, но все же получаю эту ошибку. Я использую видимость объекта и unregistertoucharea, хотя я не ввел runonupdate. Может ли это вызвать эту проблему. Если нет, кто-нибудь, пожалуйста, скажите мне, что может?java.lang.IndexOutOfBoundsException: неверный индекс 2, размер 2

Это сообщение об аварии, которое я получаю от Google Play.

java.lang.IndexOutOfBoundsException: Invalid index 2, size is 2 
at java.util.ArrayList.throwIndexOutOfBoundsException(ArrayList.java:255) 
at java.util.ArrayList.get(ArrayList.java:308) 
at org.andengine.c.a.d(Unknown Source) 
at org.andengine.c.c.e.d(Unknown Source) 
at org.andengine.c.a.a(Unknown Source) 
at org.andengine.b.a.b(Unknown Source) 
at org.andengine.b.a.a(Unknown Source) 
at org.andengine.opengl.e.g.onDrawFrame(Unknown Source) 
at android.opengl.GLSurfaceView$GLThread.guardedRun(GLSurfaceView.java:1523) 
at android.opengl.GLSurfaceView$GLThread.run(GLSurfaceView.java:1240) 

Иногда игра разваливается на GameOver, а иногда происходит сбой при перезапуске игры

Когда игра закончилась, я звоню следующую функцию

public void GameOver(){ 
    yourScoreText.setText(""+score);   
    restart_button.setVisible(true); 
    leaderboard_button.setVisible(true); 
    share_button.setVisible(true); 
    gameOverText.setVisible(true); 
    gameOverOverlay.setVisible(true); 
    yourScoreText.setVisible(true); 
    highScoreText.setVisible(true); 

    this.registerTouchArea(restart_button); 
    this.registerTouchArea(leaderboard_button); 
    this.registerTouchArea(share_button); 
} 

Когда рестарт нажимается I я вызываю следующую функцию.

public void RestartGame(){ 
    restart_button.setVisible(false); 
    leaderboard_button.setVisible(false); 
    share_button.setVisible(false); 
    gameOverText.setVisible(false); 
    gameOverOverlay.setVisible(false); 
    yourScoreText.setVisible(false); 
    highScoreText.setVisible(false); 
    this.unregisterTouchArea(restart_button); 
    this.unregisterTouchArea(leaderboard_button); 
    this.unregisterTouchArea(share_button); 
    score = 0; 
    scoreText.setText("Score: "+score); 

    Log.d("game start","game has been started"); 
    StartScreen(); 
} 
public void StartScreen(){ 
    leaderboard_home_button.setVisible(true); 
    rate_button.setVisible(true); 
    if(activity.getNoAds()==0){ 
     no_ads_button.setVisible(true); 
     this.registerTouchArea(no_ads_button); 
    } 
    if(isMute){ 
     sound_off_button.setVisible(true); 
     this.registerTouchArea(sound_off_button); 
    } else { 
     sound_on_button.setVisible(true); 
     this.registerTouchArea(sound_on_button); 
    } 
    this.registerTouchArea(leaderboard_home_button); 
    this.registerTouchArea(rate_button); 

} 
+0

'отправить свой код' – Gattsu

+0

какая строка в вашем коде дает вам это исключение? ты можешь сказать? – ranifisch

+0

Я почти уверен, что это метод .setText, не так ли? – ranifisch

ответ

3

Массив индексов отсчет от 0. Таким образом, если размер массива в = 2, он имеет следующие показатели: 0, 1. Таким образом, в этом случае номер индекса 2 не существует.

PS: если вы хотите больше деталей, дает нам некоторый код, и я буду редактировать свой ответ;)

+0

Обновлен вопрос. Это не проблема для определения/использования массива. Это что-то происходит от andengine/android's side. Сбой происходит только иногда, но это максимальное количество сбоев, которые я получаю от пользователей. –

+0

На самом деле я не знаю и не знаю, но то, что я знаю, является значением брошенного Исключения. Я могу убедиться, что ваша проблема - это индекс, который не находится в вашем массиве (имя Exception сообщает об этом). Если это не ваш код, либо вы не указываете правильную информацию в своей инфраструктуре где-нибудь (например, объявляете размер массива?), Либо у фреймворка есть ошибка, и вы можете сообщить об этом разработчикам;) – mithrop

0

Я думаю, что проблема опирается на инициализацию вашего объекта Text. При инициализации, вам необходимо установить длину максимального его:

private Text highScoreText = new Text(SOME_X, SOME_Y, resourceManager.font, "New Best: 1234567890", new TextOptions(HorizontalAlign.CENTER), vbom); 

Не забудьте сделать то же самое для Score текстового объекта.

+0

Но оценка никогда не входила в более чем 3 цифры. Поэтому я не думаю, что это должно быть проблемой. –

+0

Проверьте инициализацию других объектов Text. – ranifisch

+0

Сделал это много раз. Там все в порядке. : - / –

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

  • Нет связанных вопросов^_^