Это зависит от того, что вы делаете и что делает каждый персонаж, помимо использования компонентов. Используя gamekit, я, вероятно, предпочел бы создать класс сущностей, а не просто классы.
Рассматривали ли вы возможность использования только одной сущности игрока, а затем, когда вы меняете персонажа, вы просто удаляете/добавляете компоненты для этого персонажа.
Скажем, вы переходите с атакующего на прыгающего, вы можете удалить компонент атаки.
player.removeComponent....
и добавьте компонент прыжков
let jumpingComponent = ...
player.addComponent(jumpingComponent)
В общем, вы хотите, чтобы ваши компоненты были максимально гибкими и универсальными. Например, ваш spriteComponent должен принимать строку/текстуру изображения в своем методе инициализации, чтобы вы могли добавить один и тот же компонент к каждому объекту, но использовать другое изображение.
class SpriteComponent: GKComponent {
let node: SKSpriteNode
init(texture: SKTexture) {
node = SKSpriteNode(texture: texture, color: SKColor.clearColor(), size: texture.size())
}
}
Теперь вы можете добавить один и тот же компонент к каждому персонажу, используя разные изображения.
let character1Texture = SKTexture(imageNamed: "Character 1 image"
let spriteComponent = SpriteComponent(texture: character1Texture)
addComponent(spriteComponent)
То же самое касается ваших анимаций и других компонентов.
Я так к этому отношусь.
Скажем, у меня есть игра, в которой есть 10 типов врагов, которые более или менее одинаковы. Я бы, вероятно, попытался просто иметь 1 класс вражеских сущностей, чтобы все компоненты использовались всеми 10 врагами. Затем я бы добавил соответствующие компоненты, которые делают каждый из них уникальным динамически или на основе enumType, который я бы передал в методе init.
С другой стороны, скажем, у меня есть 3 главных героя, которые делают очень уникальные вещи, чем, возможно, проще и чище просто создать 3 класса сущностей. Также не забывайте о подклассах, поэтому вы можете создать 1 класс сущностей со всеми общими компонентами, а затем создать подклассы для двух других сущностей.
Apple делает это в DemoBot, где у них есть сущность TaskBot, а затем сущность FlyingBoy и сущность GroundBot, которые являются подклассами TaskBot.
Это действительно зависит от вас.
person
crashoverride777
schedule
06.03.2016