SpriteKit和GameplayKit中的实体组件系统

Apple于2015年推出了GameplayKit,并在过去几年中不断发展壮大,为我们的开发人员提供了许多有用的功能,供我们的游戏使用。 这使我们可以更快地创建游戏,并专注于核心元素,例如出色的体验和图形。

尽管自2015年以来一直存在,但我不得不承认,我只是刚刚开始在正在开发的SpriteKit游戏中使用它,所以我认为这对于我记录自己的旅程和学习也是一个很好的机会。

我要解决的第一件事是实体组件系统。


什么是实体组件系统?

好问题!

实体组件系统是一种体系结构(构建代码的方式)方法,它使您可以在复杂性和规模方面扩展游戏,而无需在代码的各个部分之间建立相互依赖性。 从理论上讲,这应该可以使您对游戏进行更改而不会产生意外的副作用。

实体

用最简单的术语来说,您可以认为实体代表游戏中的“事物”。 因此,这可能是角色 (例如玩家),也可能是敌人 ,或者是建造者游戏中的农场 。 如果您将其与OO编程进行比较,那就像一个类,但有一点点区别,这使我们很满意:

组件

组件实际上包含执行实体特定任务的逻辑。 好像您已经包装了OO函数并将其实际上移到了一个可以应用于其他类的文件中一样。 一个常见的示例可能是“可呈现”组件,在SpriteKit游戏中,该组件会将SKNode添加到您的实体和场景中。 另一个示例可能是物理组件,它仅将物理添加到您的实体。 这样做的好处是可以将其添加到“播放器”,“敌人”和“农场”中,而不必在每个位置都编写单独的物理代码。


创建GKEntity是一个简单的过程,您只需要继承GKEntity本身即可

导入GameplayKit

球员:SKEntity {

}

创建组件非常简单

导入GameplayKit

class PresentableComponent:GKComponent {

}

然后,将组件添加到您的实体。

让玩家= Player()

player.addComponent(PresentableComponent())

管理实体和组件的方法还有很多,我们将在以后的文章中介绍。 这只是Entity-Component系统的快速概述,但是您可以在https://developer.apple.com/library/archive/documentation/General/Conceptual/GameplayKit_Guide/EntityComponent.html#//apple_ref中找到更多信息/ doc / uid / TP40015172-CH6-SW1

谢谢阅读。