Почему я не могу добавить свой компонент в GKComponentSystem? - PullRequest
0 голосов
/ 15 апреля 2020

Мой код:

bunnyE = MyEntity()
var wsc : WrappableSpriteComponent = WrappableSpriteComponent()
wsc.setSprite(sprite: bunny!)
bunnyE?.addComponent(wsc)
wrappableComponentSystem = GKComponentSystem<WrappableSpriteComponent>()
wrappableComponentSystem!.addComponent(foundIn: bunnyE!)

self.lastUpdateTime = 0 //Break point here

Когда я прохожу свой код до точки останова, я нахожу это в XCode, если я выполняю команду:

po bunnyE?.components 

Тогда я вижу что у bunnyE есть компонент, который я добавил.

Но если я сделаю:

 po self.wrappableComponentSystem?.components

Тогда кажется, что wrappableComponentSystem не имеет компонентов.

Я проверил в своих обновлениях сцен и нашел тот же результат:

override func update(_ currentTime: TimeInterval) {
    // Called before each frame is rendered

    // Initialize _lastUpdateTime if it has not already been
    if (self.lastUpdateTime == 0) {
        self.lastUpdateTime = currentTime
    }

    // Calculate time since last update
    let dt = currentTime - self.lastUpdateTime

    // Update entities
    for entity in self.entities {
        entity.update(deltaTime: dt)
    }

    self.lastUpdateTime = currentTime
    self.wrappableComponentSystem?.update(deltaTime: currentTime) // Breakpoint
}

В этой точке останова я также вижу, что моя сущность bunnyE имеет компонент, а моя wrappableComponentSystem - нет. Я подтвердил, что моя wrappableComponentSystem не равна nil.

Я использую swift5, Xcode 11.4, iOS 13.4

Какую ошибку я совершаю?

1 Ответ

0 голосов
/ 16 апреля 2020

Я обнаружил проблему в этой строке:

wrappableComponentSystem = GKComponentSystem<WrappableSpriteComponent>()

Если я изменю ее на:

wrappableComponentSystem = GKComponentSystem(componentClass: WrappableSpriteComponent.self)

Затем в том же блоке, когда я добавляю компонент, и делаю po wrappableComponentSystem, я вижу, что был добавлен один элемент.

Проблема в том, что к моменту запуска метода обновления моей сцены кажется, что мой wrappableComponentSystem больше не содержит никаких компонентов.

Затем я изменил строку объявления в своем классе с:

private var wrappableComponentSystem : GKComponentSystem<WrappableSpriteComponent>?

, где WrappableSpriteComponent наследует от GKComponent, на:

private var wrappableComponentSystem : GKComponentSystem<GKComponent>?

Теперь, когда я добавляю компонент, он сохраняется .

...