为什么我不能将我的组件添加到GKComponentSystem?

时间:2020-04-15 11:42:24

标签: swift sprite-kit gameplay-kit

我的代码:

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 :(得分:0)

我在这一行发现了一个问题:

wrappableComponentSystem = GKComponentSystem<WrappableSpriteComponent>()

如果我将其更改为:

wrappableComponentSystem = GKComponentSystem(componentClass: WrappableSpriteComponent.self)

然后,当我添加组件并执行po wrappableComponentSystem时,在同一块中,我看到添加了一个元素。

问题在于,当触发场景的更新方法时,看来我的wrappableComponentSystem不再包含任何组件。

然后,我将类中的声明行从以下位置更改:

private var wrappableComponentSystem : GKComponentSystem<WrappableSpriteComponent>?

其中WrappableSpriteComponent从GKComponent继承到:

private var wrappableComponentSystem : GKComponentSystem<GKComponent>?

现在,当我添加组件时,它仍然存在。