我的游戏有许多不同类型的好人和许多不同类型的坏人。他们都将向对方发射弹丸,但我不希望任何对准都会发生意外附带损害。因此,坏人不应该打/伤害其他坏人,好人不应该打/伤害其他好人。
我想解决此问题的方法是通过使其Unit
实例(这是javascript,btw)具有alignment
可以为good
or 的属性bad
。而且我只会让碰撞发生
class Attack
boolean didAttackCollideWithTarget(target)
return attack.source.alignment != target.alignment and collisionDetected(attack.source, target)
当然,这是伪代码。
但是我之所以问这个问题,是因为我觉得除了在Unit
类中添加另一个属性之外,还有一种更优雅的方法来设计它。
5
过滤是此处的典型方法。本质上就是您所描述的。也有层。两层,坏层和好层。坏人的弹丸被射入好层,反之亦然。
—
MichaelHouse
@ Byte56您能详细说明这个“层”概念吗?或至少链接到有关它的东西?我以前从未听说过。
—
Daniel Kaplan 2013年
本质上,它们是不同的“世界”。一层中的所有对象彼此交互,但不与其他任何层交互。这可以通过标签(例如过滤)来完成,也可以通过每一层完全不同的数据集来完成。
—
MichaelHouse
总之,它是分组。分组好子弹,仅检查是否与坏人发生冲突。Flixel有这样的概念。
—
ashes999
一则挑剔的设计说明:您是要击打 “友军射击” 但不造成伤害,还是希望它们完全忽略盟友,而可能通过它们来打击敌人?
—
史蒂文·斯塔德尼基