我有一个yahtzee(骰子游戏),玩家掷5个骰子。我使用倒数计时器做一个小动画,其中所有骰子显示为“1”然后“2”然后“3”然后“4”然后所有骰子应该转到随机数。在模拟器和我测试它的任何手机上,这似乎在100%的时间正常工作...因为我已经在Android市场上发布了我的游戏我已经有数百个崩溃报告抱怨这个错误,似乎与这个动画有关。从用户消息判断,它看起来像是所有“6”,然后关闭力量。
这是代码:
public void animateDize(){
new CountDownTimer(900,150){
Integer j = 0;
@Override
public void onTick(long millisUntilFinished) {
for(int i = 0; i < 5; i++){
if(DieSet[i]== 0){ // If dice are not clicked, animate them
imageButtons[i].setBackgroundResource(imageRes[j]);
}
}
j ++;
}
@Override
public void onFinish() {
randomDize(); // Set dice to random values
}
}.start();
}
以下是我从崩溃报告中收到的错误。也许我有更好的方式来改变它的动画?
java.lang.ArrayIndexOutOfBoundsException at com.surreall.yatzee.yatzee $ 7.onTick(yatzee.java:649)at at android.os.CountDownTimer $ 1.handleMessage(CountDownTimer.java:124)at at android.os.Handler.dispatchMessage(Handler.java:99)at android.os.Looper.loop(Looper.java:123)at android.app.ActivityThread.main(ActivityThread.java:4627)at java.lang.reflect.Method.invokeNative(Native Method)at java.lang.reflect.Method.invoke(Method.java:521)at com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:860) 在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618)at dalvik.system.NativeStart.main(原生方法)
答案 0 :(得分:2)
基于我们在此处看到的代码,看起来j
会变得越来越大,直到它太大而不能成为数组imageRes
的索引,此时你会得到这个例外。如果我们看到更多的代码,我可能会有不同的解释,但基于此,这似乎是一个可能的解释。
答案 1 :(得分:1)
看起来j
的值在onTick()
方法的第7个刻度上为6。我假设你只有6个骰子图像,这意味着它到达imageRes[5]
后会尝试转到imageRes[6]
,我假设它不存在(索引值为6是第7个指数值,骰子只有6个方面)。这是我能看到的唯一解释。