【问题标题】:IndexOutOf range exception thrown in TimeHandlerTimeHandler 中抛出的 IndexOutOf 范围异常
【发布时间】:2015-03-26 09:04:29
【问题描述】:

我正在制作一个类似纸牌的游戏。下面的方法处理对手的攻击。它应该通过对手的牌(他们之间有两秒的延迟)并执行他们的攻击(dealDamage() 返回伤害)。首先,它应该检查当前对手是否处于活动状态(即没有被杀死)以及是否已经攻击,如果是,则执行他们的攻击。之后,方法转移到下一个活跃的对手。在最后一个之后,它应该停止迭代并更改为下一轮。尽管在第一轮一切都按计划进行,但是在第二轮或最后一轮(只有一个对手处于活动状态时)它经常崩溃。最多可以有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();

}

【问题讨论】:

  • 请添加您得到的异常堆栈跟踪(并将我们指向正确的行号)
  • pTimerHandler.setAutoReset(false) 是做什么的?
  • 在最后一个之后它应该停止运行时间处理程序。如果我删除它,它会尝试再次运行它。如果我停止它,它会转到 gm.nextround();

标签: java android timer andengine


【解决方案1】:
  while (gm.opponentList.get(i).isAvailable == false
                        || gm.opponentList.get(i).attacked == true) {
      i++;
  }

如果退出条件从未满足,则继续递增i,当它超过gm.opponentList 的大小时,将抛出IndexOutBoundExcetion。您可能希望在 while 循环中检查 igm.opponentList.size()

【讨论】:

  • omg.. 当然... 甚至不应该问这个问题.... 添加了 'if(i
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-11-18
  • 2013-09-28
  • 2012-09-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多