如何在RogueLike游戏中管理不同的动作速度?


14

如何在RogueLike游戏中管理不同的动作速度?

我的意思是,基于回合的游戏可能会让演员以不同的“速度”行动,具体取决于动作和其他一些特征。然后,无论演员是否有更快的速度,他们都会比其他演员有效地执行更多的动作/转弯。

如何确定演员何时应该可以表演(转弯时间表?)?

看来有不同的方法可以做到?你能用算法解释一些吗?


7
我有一种感觉,如果您详细描述了所需的功能,则算法将变得显而易见。
Tetrad 2012年

正如Tetrad所说,加上“动作速度”是什么意思?盗贼通常是回合制的,所以我看不到这如何适用于他们。
洛朗·库维杜

2
即使是基于回合的游戏,某些实体的移动速度也将比其他实体快或慢,与其他实体相比,回合或多或少。我解决了这个问题。
克莱姆(Klaim)

3
@Patrick Hughes Nethack是最古老和最受欢迎的流氓之一,它具有非常重要的速度属性。nethackwiki.com/wiki/Speed
哈里·斯特恩

1
@HarryStern我一直都表现不好?这可能解释了几件事... =)
Patrick Hughes

Answers:


12

在我的流氓游戏《暴君》中,我使用了动作点和速度等级系统。

基本上:

  • 大多数动作的AP费用为100
  • 大多数生物的速度为100

然后,游戏循环将如下进行。

  • 英雄采取行动。
  • 经过时间的计算公式为 hero action AP cost * 100 / hero speed
  • 所有生物获得的AP等于 creature speed * elapsed time / 100
  • 生物采取行动并减去AP,直到其AP <= 0
  • 重复

该系统总体上运行良好,示例功能非常出色:

  • 如果您有一个非常快的英雄(也许是由于魔法速度加成),您可以在单个生物移动之前先进行几步移动(由于经过的时间很小,所以它的AP会变为负数圈)
  • 您可以通过更改AP成本来或多或少地执行某些操作
  • 您可以通过减去AP来延迟生物,或者通过添加AP来给它们带来一次性的突然提升

试图把我的头缠住。如果您有1个玩家和4个玩家。这不会使最后一个玩家的堆栈经过时间越来越多。允许他采取大约4项动作,第二次连续8次?
Dr.Denis McCracleJizz 2015年

4

动作要点。给每个实体一个“速度”,以便更快的演员每回合获得更多的积分。使每个动作都需要完成一个特定的点数,并在玩家执行一个动作时从该回合的玩家点中减去该点数。如果某动作所获得的积分超过了玩家剩余的积分,则将其标记为“部分完成”,然后让他在下一回合中完成。


2

您是说让动作多转(例如,连续睡50圈)吗?

我要做的是保留一个对象player.currentAction。currentAction可能包含该动作将需要转动多少圈,该动作的分辨率是多少,以及取消该动作的状态列表(处于危险中,受到攻击,太热等)。每回合,在检查玩家输入之前,我们将检查玩家当前是否处于动作中间,然后执行类似...的操作。

if(!player.currentAction.interrupted())
{
 if(player.currentAction.complete() == true)
   {
    player.currentAction.doAction(); //Some actions, like casting a spell, would have something happen here. Others, like sleeping, may or may not, depending on how you coded it.
    player.currentAction = null;
   }
else player.currentAction.decreaseTimer(); //Decrease our timer by one.
}
else 
{
 player.currentAction.interrupt(); //Let the player know he's been interrupted. Bungle the spell, cancel sleep, etc.
 player.currentAction = null;
}

2

您可以使用动作点,但本质上没有转身,只有tick嗒声,它们很小。假设每个演员都有动作点累积速度(例如,每刻2 AP)。它会启动一个值得10 AP的动作。游戏前进5个滴答声(因为这是演员支付动作的AP价格所需的费用)。

当有几个演员。游戏一步一步前进,直到有人在执行此操作之前支付了AP价格。

该方法类似于@mikera的方法,只是没有否定AP。


这要麻烦得多,因为您需要存储生物的“预期”动作。有些动作取决于状态,这些状态可能会在暴民积累足够的点之前改变。
沃里克·艾莉森

也许它并不完美,但它反映了现实生活,当您决定击球时,先挥杆再击球-这就是决策准备动作,这是该系统所允许的。这也允许根据实际情况选择阻止动作。
zzandy 2012年

我更喜欢朝另一个方向发展:暴民以n-ticks的代价选择一个动作,然后直到n-ticks过去后才能选择新动作。可以将其实现为在每个刻度上递减的单个值。
kitsu.eb 2016年

-1

高分辨率时间

如果拳打 400圈,拳1000圈,我可以在您踢我之前至少打两次,在您踢我两次之前我可以打5次。

通过使事情转很多圈,您可以控制事情持续多长时间。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.