我正在写一个文字游戏,我需要一个简单的战斗系统,就像在泥浆,你发出命令,一旦在一段时间“滴答”发生的时候,那些命令执行,玩家和怪物造成伤害,各种不同的事情发生。如何实现这个概念? 我想过做保存最后一跳时间的变量和函数,堆栈只是把事件,并在那个时候(时间+ x)的所有simutaniously执行它们。有没有更简单或清洁剂变种这样做呢?

什么是为可能的语法?

double lastTickTime;
double currentTime;

void eventsPile(int event, int target)
{
// how do i implement stack of events? And send them to execute() when time is up?
}

void execute(int event, int target)
{
     if ((currentTime - lastTickTime) == 2)
     {
         eventsHandler(event, target);
     }    
     else 
     { // How do I put events on stack?
     }
}
有帮助吗?

解决方案

用简单的动作栈的问题是动作的顺序可能是基于时间的 - 谁类型最快将罢工第一击。你或许应该优先考虑引入在堆栈,使例如全球所有的事件触发,再生物的动作事件,但这些操作事件被般的敏捷身手,或水平的一些属性排序。如果生物具有较高的灵活性,然后它获取第一个命中。

其他提示

这是我所看到的,大多数这样的发动机是事件,而不是时间,为主。用新tick触发最后tick结束之后,一些间隔。 (因此大多避免花费的时间比间隔ticks的问题)

这也简化了实现;您只需一个游戏循环触发一个事件tick,则所需的间隔sleeps / yields。这是琐碎

它可以进一步通过在世界建模为树,其中每个元件管理传播事件(如ticks)到他们的孩子简化。只要你避免/管理“循环”,这个效果很好(我已经做到了)。

这有效地降低了tick系统是这样的(psudocode):

while (isRunning) {
    world->tick();
    sleep(interval);
}

在大多数情况下,那里有一点需要得到多少发烧友比调整前一个持续时间的长度。

任何单个实体的行为将自己的行动队列的一部分,和自己在处理“嘀”的事件。

一般用户命令将被分成“游戏中”和“元”命令,任何游戏中只会修改其角色的行动队列,以便在他们的下一个蜱进行处理,按照正常的任何其它实体。

简单的圆形为基础的战斗从这个基础上自然地遵循。实时可以与ticks的更精细的划分进行建模,并可选择“时间池”。

使用执行每x毫秒(而x是滚动时间),执行把该方法中的堆栈上的任何操作的计时器。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top