为什么我不能将我的组件添加到 GKComponentSystem?
Why can't I add my component to a GKComponentSystem?
我的代码:
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 不为零。
我用的是swift5, Xcode 11.4, iOS 13.4
我犯了什么错误?
我发现这一行有问题:
wrappableComponentSystem = GKComponentSystem<WrappableSpriteComponent>()
如果我把它改成:
wrappableComponentSystem = GKComponentSystem(componentClass: WrappableSpriteComponent.self)
然后在同一块中,当我添加组件并执行 po wrappableComponentSystem
时,我可以看到已添加单个元素。
问题是,当我的场景的更新方法被触发时,我的 wrappableComponentSystem 似乎不再包含任何组件。
然后我将 class 中的声明行从:
更改为
private var wrappableComponentSystem : GKComponentSystem<WrappableSpriteComponent>?
其中WrappableSpriteComponent继承自GKComponent,为:
private var wrappableComponentSystem : GKComponentSystem<GKComponent>?
现在当我添加一个组件时,它仍然存在。
我的代码:
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 不为零。
我用的是swift5, Xcode 11.4, iOS 13.4
我犯了什么错误?
我发现这一行有问题:
wrappableComponentSystem = GKComponentSystem<WrappableSpriteComponent>()
如果我把它改成:
wrappableComponentSystem = GKComponentSystem(componentClass: WrappableSpriteComponent.self)
然后在同一块中,当我添加组件并执行 po wrappableComponentSystem
时,我可以看到已添加单个元素。
问题是,当我的场景的更新方法被触发时,我的 wrappableComponentSystem 似乎不再包含任何组件。
然后我将 class 中的声明行从:
更改为private var wrappableComponentSystem : GKComponentSystem<WrappableSpriteComponent>?
其中WrappableSpriteComponent继承自GKComponent,为:
private var wrappableComponentSystem : GKComponentSystem<GKComponent>?
现在当我添加一个组件时,它仍然存在。