首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何有效地在GameplayKit/SpriteKit中建模实体和组件

如何有效地在GameplayKit/SpriteKit中建模实体和组件
EN

Stack Overflow用户
提问于 2016-03-06 05:17:30
回答 1查看 1.3K关注 0票数 5

从这里的GameplayKit开始,我在建模一个没完没了的跑步者,播放器可以通过点击屏幕在字符之间交换。字符首先可以攻击的近程(组件)、第二跳(组件)和第三次射(组件)。

我想知道在这两个之间建模的最佳方法是什么

  1. 创建一个具有3个不同字符实体(数组)的类播放器,其中一个带有它的组件
  2. 创建一个包含3个不同字符组件的实体播放器,并添加所有的动作和动作组件(射击/跳跃.)

这是一个真正的大项目,所以我担心的是最佳方式,以使代码在很长一段时间内都是可访问和可读的。

Ps:.SpriteComponent将是负责所有实体在.sks上的可视化表示的组件。

Ps2:。如果可能的话,可以迅速地举一些例子。

谢谢您抽时间见我。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-03-06 13:28:53

除了使用组件之外,它还取决于您所做的事情以及每个字符所做的事情。使用gameplayKit,我可能更喜欢创建实体类,而不是仅仅创建类。

您是否考虑过只使用一个player实体,而不是当您更改字符时,您只是删除/添加该字符的组件。

假设您从“攻击”更改为“跳转”,则可以删除攻击组件。

代码语言:javascript
复制
 player.removeComponent....

并添加跳跃组件。

代码语言:javascript
复制
 let jumpingComponent = ...
 player.addComponent(jumpingComponent)

通常,您希望确保组件尽可能灵活和通用。例如,您的spriteComponent应该在init方法中使用图像字符串/纹理,这样您就可以向每个实体添加相同的组件,但使用不同的图像。

代码语言:javascript
复制
 class SpriteComponent: GKComponent {

     let node: SKSpriteNode

     init(texture: SKTexture) {
          node = SKSpriteNode(texture: texture, color: SKColor.clearColor(), size: texture.size())
     }
}

现在,您可以在使用不同的图像时向每个字符添加相同的组件。

代码语言:javascript
复制
    let character1Texture = SKTexture(imageNamed: "Character 1 image"
    let spriteComponent = SpriteComponent(texture: character1Texture)
    addComponent(spriteComponent)

你的动画和其他组件也是如此。

我对待它的方式是这样的。

假设我有一个游戏,其中我有10个类型的敌人,或多或少是相同的。我可能会尝试只有一个敌人的实体类,将所有的组件使用所有10个敌人。而不是添加相关组件,这些组件动态地或基于init方法中传递的enumType使每个组件都是唯一的。

另一方面,假设我有3个主要人物,他们都做着非常独特的事情,也许仅仅创建3个实体类就更容易和更干净了。另外,不要忘记子类,这样您就可以创建一个包含所有共享组件的实体类,而不是其他两个实体的子类。

苹果在DemoBots中就是这样做的,他们有一个TaskBot实体,而不是一个FlyingBoy实体和一个GroundBot实体,这两个实体都是TaskBot的子类。

这真的取决于你。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35823426

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档