损坏逻辑应该放在哪里游戏引擎或角色类

时间:2010-05-22 00:06:11

标签: actionscript-3 actionscript

我正在制作游戏,我正在尝试确定在屏幕上交换两个物体之间损坏的最佳做法。是否应该直接在两个物体之间传递伤害,还是应该通过一个中央游戏引擎来决定伤害和不同的标准,例如命中或未命中或处理的数量。

总体而言,最佳做法是什么。

3 个答案:

答案 0 :(得分:4)

这在很大程度上取决于游戏规则。但是,多个对象需要参与其中并不罕见。但是,我建议不要将游戏规则代码放入显示对象的MovieClip实例中;将他们保持为同伴可以让游戏状态更容易分开并保存/传播。

以下是一个例子:

  • 演员A发起攻击。
    • 演员A提供准确度值(命中滚动)。
    • 武器(或弹药,如果适用)提供基础伤害值(伤害掷骰)和伤害类型。
    • 武器的类型决定了演员A的能力如何修改击打掷骰和伤害掷骰。
    • 武器上的修改器可能会修改卷筒,添加额外的伤害组件,或将“打击”效果与攻击相关联。
  • 此时似乎有一个攻击对象类形成,包含以下内容:
    • 准确度值
    • 一系列类型的损害赔偿(对于仅有效的攻击可能是空的)
    • 其他效果的集合(可能为空)
  • 现在攻击到达目标。
    • 攻击时触发的目标特效可能会消失。
    • 目标可能有多层防御 - 例如,掩护,隐藏,躲避,偏转,阻挡,护甲和天生护甲。任何或所有这些都可能导致攻击失败。
  • 攻击连接。
    • 击中时触发的目标特殊效果可能会消失。
    • 目标也可能具有减少伤害或消除能力,例如足以吸收部分攻击的护甲,或对一种或多种特定攻击类型的免疫/抵抗/弱点。
  • 现在可以解决实际损坏。如果攻击准确但无效,则可能为零。
    • 与攻击解决相关的特殊效果。
      • 有些可能取决于伤害,例如受伤的毒药。
      • 有些可能是无条件的,例如禁用爆发。
    • 对目标造成伤害时触发的特殊效果,如反应装甲或“刺”伤害,可能会熄灭。

答案 1 :(得分:2)

让引擎处理每个字符的损坏计算中冗余的所有代码。角色将被迫完成剩下的工作。

我不太了解你正在制作什么样的游戏。但对于某些游戏,当引擎被告知A攻击B时,代码可能类似于:

//somewhere in your engine:
damage = A.get_damage(B);
trace (damage); // {damage:60, hit_chance = 0.8}
B.send_damage(damage);

我认为在大多数情况下有必要使用B.send_damage()而不是直接控制B的健康属性的引擎.AI往往是由状态驱动的。可能会有一些影响A或B的变量影响损坏(例如无敌),其中(IMO)发动机最好不知道它们的存在(或者你最终会得到巨大的开关块; D )

你看我如何在A.get_damage()中将B作为参数发送?不幸的是,在这样的方法中,这通常是必要的。 A的伤害/ hit_chance可能受到距离A的距离有多远。

答案 2 :(得分:0)

将它放入游戏引擎中。屏幕上的对象表示模型中的视图和控制器,即引擎(这是逻辑所属的位置)。虽然将它直接放在视图/控制器端可能很诱人,但是一旦游戏变得足够大,你的游戏代码最终会变成意大利面。