这是一个概念性问题,因此不包含任何代码。
当制作多人射击游戏时,无论是2D还是3D,有基于射弹的武器,每个射弹都应该包含关于是谁射击它的信息,以及应该做多少伤害?或者,如果实体受到抛射物击中,是否应该解释抛射物并相应地对自身造成伤害?
基本上,问题是“应该在何处处理有关损害的信息/代码。”
思想?
答案 0 :(得分:1)
就我个人而言,我认为给予射弹这种伤害提供了更好的模块化,并且在逻辑上更有意义。
<强>模块化强>
我曾经做过M.U.G.E.N,一个格斗游戏引擎,个人创作者和创作者团队可以发布完整的游戏或游戏。完整游戏实际上相对较少,可以复制到您自己的文件夹中并添加到您的名单中的个人角色,舞台等。因此,如果任何游戏引擎绝对必须设计为模块化,那就是它。
M.U.G.E.N是如何处理这种情况的?除非在特定情况下特定创作者想要做一些有创意或非传统的事情,否则伤害数量(以及更多信息,如击中声音,眩晕多长时间,结果进入哪个状态)都由角色承担。提供攻击(在射手中,这相当于持有此信息的子弹)。为什么呢?
嗯,简单地说,没有办法可以定义一个角色,以便它可以告诉谁击中它以及当所述角色和攻击甚至还没有制造时他们使用了什么攻击。请记住,1999年的角色和2016年的角色能够毫无问题地互相争斗。而且几乎同样令人畏惧(并且与您更相关),即使角色的创建者能够以某种方式预先知道每个角色以及将要添加的每个攻击,也需要长时间和批次为所有人添加案例的代码。
让我们回到拍摄者的想法。考虑一下你有两种子弹。一个是大的并且造成很多伤害(我们称之为BigBullet),而另一个很小并造成一点点伤害(我们称之为SmallBullet)。还要考虑这些子弹可能会损坏的两种目标(我们称之为士兵和坦克)。如果将损坏信息存储在目标类别(士兵和坦克)中,则必须为每种目标类型的每种类型的子弹定义此信息。
也就是说,士兵类必须有逻辑来确定它是哪种类型的子弹以及应该处理多少伤害。坦克类还必须有逻辑来确定它是哪种类型的子弹以及应该处理多少伤害。如果从公共基类继承这两个类,则可以减少此代码的冗余。
但与替代方案相比。 BigBullet和SmallBullet有一个公共损害领域。士兵和坦克不必关心它击中了什么类型的子弹;只要问它应该做多少伤害。因此,您可以完全删除该代码。
更重要的是,这使得设计可以轻松扩展。如果你以后决定要一个新的HugeBullet类来造成更大的伤害,你需要做的就是创建一个新的HugeBullet类。您根本不必担心更新目标实体。
<强>逻辑强>
这是更多的意见,但让我描述一下我看待它的方式。
考虑人类头骨。这是一件艺术品。它有关节,允许下颌运动。它在所有正确的位置都有洞,可以让感官信息进入,还有一个食物洞。它专为耐用性和观察而设计。
但它不是专为可能发生的每一件事而设计的。它没有子弹偏转特性或轴生存特性。它具有促成这些防御的属性,但仅限于最模糊和最一般的术语。也许他们对穿孔有一般的抵抗力,但他们对每种类型的子弹都没有特别的抵抗力。
最终,它所造成的伤害背后的驱动力在于击中它的武器的设计。子弹旨在切割肉体和骨骼。因此,组织代码以使子弹对象携带损伤数据可以更准确地模拟现实。
答案 1 :(得分:0)
IMHO 完全取决于您认为的损害: 射弹的潜在伤害......绝对存放在每个射弹中。 对目标造成的伤害......一个计数器,用于增加不同射弹对其造成的所有伤害。 存放在射弹上的关于射击实体的信息仅在射击实体被授予目标成功命中点数时才有意义。