java - TimeHandler 中抛出 IndexOutOf range 异常

标签 java android timer andengine

我正在制作一款类似卡牌的游戏。下面的方法处理对手的攻击。它应该检查对手的牌(它们之间有两秒的延迟)并执行他们的攻击(dealDamage() 返回伤害)。首先它应该检查当前对手是否处于 Activity 状态(即没有被杀死)以及是否已经攻击,如果是,则执行他们的攻击。之后,方法转移到下一个活跃的对手。在最后一轮之后,它应该停止迭代并更改为下一轮。虽然在第一轮中一切都按计划进行,但在第二轮或最后一轮(当只有一个对手处于 Activity 状态时)它经常崩溃。最多可以有 5 个对手。我显然错过了一些明显的事情,但我无法让它发挥作用。

编辑 错误出现在 while(gm.opponentList.get(i).is available... 例如,索引超出范围:索引 4 大小 4。

public void opponentAttack(){


    this.registerUpdateHandler(new TimerHandler(2f, true, new ITimerCallback() {
        int i = 0;
        @Override
        public void onTimePassed(TimerHandler pTimerHandler) {



            if (i < gm.opponentList.size()) {
                while (gm.opponentList.get(i).isAvailable == false
                        || gm.opponentList.get(i).attacked == true) {
                    i++;
                }
                if (gm.opponentList.get(i).isAvailable == true
                        && gm.opponentList.get(i).attacked == false) {

                    gm.negotiationStrength = gm.negotiationStrength - gm.opponentList.get(i).dealDamage();
                    i++;
                }
                if (gm.negotiationStrength < 1) {
                    gm.negotiationEnded = true;
                    gm.playersTurn = false;
                }
                i = 0;
            }else{

                pTimerHandler.setAutoReset(false);

            }

        }
    }));

    gm.nextRound();

}

最佳答案

  while (gm.opponentList.get(i).isAvailable == false
                        || gm.opponentList.get(i).attacked == true) {
      i++;
  }

如果从未满足退出条件,则不断增加 i,当它超过 gm.opponentList 的大小时,会抛出 IndexOutBoundExcetion 。您可能想在 while 循环中检查 igm.opponentList.size()

关于java - TimeHandler 中抛出 IndexOutOf range 异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29274495/

相关文章:

java - net.sf.json 对象中的十进制格式问题

java - 在jsp上显示来自sql表的数据的其他一些方法

android - 蓝牙连接的线程在连接后立即关闭 socket

android - 创建一个通用的进度对话框以用于各种 Activity

android - 验证 ant.properties 中的别名是否正确

java - 如何从静态上下文初始化重绘计时器?

java - 调用timer.cancel() 方法后,TimerTask 会再运行一次

java - 向 KeyListener 添加计时器

java - 使用 Jackson 将 Json 数组拆分为单个 Json 元素

java - 布局预览渲染问题 : PorterDuff Color Filters are not supported