请教一个战斗中时间控制的问题

creator 2.2
在做一个mud游戏,需要把战斗情况以纯文字实时显示在Label中,例如:
每隔一秒钟显示一行字,谁对谁造成了多少点伤害

我首先想到的是用计时器,但还需要显示回合数,这就很郁闷了,想把计时器写在for循环里,但是结果不是想要的,for循环会直接执行全部循环次数,而不是等待计时器结束再执行下一次循环

在线等大大帮忙解答!!

简单点,写在update中this.time += dt;随时控制变量归零重新计时,还可以搞个变量做开关随时暂停计时。if(paused){return}

但是这样计算双方的伤害又写在哪里呢?或者可不可以做到这样:计时器写在for循环里,for语句的每一次循环都要等待上一次for循环的计时器结束再执行呢?

有了计时器还要for干嘛,直接定一个每秒执行的计时器,把你要执行的内容放进去

伤害是伤害,时间处理是时间的,两者不应耦合,伤害处理用时间就取一下时间,比如封装个getTime(),不要写在一起。

你需要的是协程,如果不用协程,自己弄个状态机搞。

    for (var i = 1; i < 11; i++) {
        this.fightRichText.string += "<br/>第" + i + "回合"
        this.schedule(function () {
            this.fightRichText.string += "<br/>发起攻击"
        }, this.interval, this.repeat, this.delay);
    }

这样有没有更清楚一点呢,我是想达到这样的效果。
但运行结果是10个计时器同时触发了,本意是想10个计时器按顺序运行。
就类似于,我想要10个计时器串联,但这样写的结果是并联的,应该咋解决。。

this.delay = i * 60

每个回合的战斗时间是不确定的

那就更应该灵活处理,比如一个时间队列,this.timeQueue = [],每个新回合都推入一个计时

可以把for循环放在update里,改写成if (i< 11 && this.mark)类似这样。
但是更好的方法应该是用异步去做

我大概理解你可能是想用for这种语法来描述可控的异步过程,有两种思路解决:

  1. 如果你用typescript,则可以将for所在的方法声明为async,for内部await每个调度器完全执行完成。
  2. 使用cc.Tween也可以解决,在for中通过cc.Tween.delay设置每回合每次攻击的间隔时间,通过cc.Tween.call设置每回合每次攻击的回调方法。

对对,cc.Tween可以解决!感谢大佬!