-1

我正在使用 iOS 9 中 GameplayKit 的实体/组件概念设计我的游戏,对于 ShootComponent,应该将子弹/导弹定义为实体吗?

是的原因:

将逻辑与其父级分离,例如 playerTank 或enemyTank;

如果不是,TankEntity 需要区分它的子弹是否与其他实体或自身相撞。

否的原因:

它不是逻辑世界中的实际实体,由我的坦克或敌方炮塔发射;

子弹总是被射击并消失,所以游戏需要不时添加/删除它;

对于您的意见,请。

4

3 回答 3

0

首先让我们阅读亚当马丁对他的条款的原始描述。Apple 似乎从 Martin 那里得到了实体和组件的想法:

实体:实体是通用对象。通常,它只包含一个唯一的 id。

组件:对象某一方面的原始数据,以及它如何与世界交互。

系统: “每个系统连续运行(好像每个系统都有自己的私有线程),并对每个拥有与系统查询匹配的组件或组件的实体执行全局操作。”

Martin 只是在定义组合设计的术语,这是一种更可重组和更灵活的继承替代方案。所以实体是你可能认为是类的实例,但是类已经被剥离了所有的数据和方法,这些数据和方法已经被移出到组件中——实体只是委托给组件。

所以你的导弹......它将是一个普通OO术语中的类的实例 - 一个对象,对吗?导弹可以有多种行为方式……它可以寻找敌人,可以直线飞行,可以加速等。它还具有指示是否击中敌人的属性,以及其总伤害的属性、健康等。

所以导弹是一个实体,而这些不同的方法/数据将是导弹实体的组成部分。

Martins 的方法很有趣,并且没有像 OO 那样关注组合设计(我真的不知道是什么原因),所以我可以理解为什么 Apple 会在这样的游戏框架中采用它。

但他的想法似乎并没有得到很好的充实。例如,通常在组合设计中有一个委托层次结构,其中对象将继续委托一个链,直到找到一些数据或方法。在顶部有一个元对象,一切都委托给它。这样,对象既是组件又是实体——它们既充当委托对象,又充当被委托对象。但是 Martins 的术语不支持这一点……他的模型是扁平的——只有实体,然后是可以添加到其中的组件,但实体之间没有委托,也没有元对象。

也许他觉得这种扁平化设计适合游戏开发。我有我的怀疑......你似乎想要某种对象的层次结构。我会寻找一种混合继承的方法,或者设置某种自定义委托层次结构,其中对象可以充当实体和组件。您可能会看看这在该框架内是否可行,或者它是否不仅仅是您自己编写的。

于 2022-01-02T19:09:57.730 回答
0

最终决定将子弹/导弹定义为实体,因此在接触测试、渲染等组件中充当实体。

于 2015-11-25T02:20:10.563 回答
0

我会将它添加为使用它的实体的组件。因此,您将能够使任何实体发射子弹或导弹。请记住,您的实体应该只作为一个简单的参考,其中没有任何逻辑。

于 2019-01-29T14:08:18.317 回答