当在父节点上添加和删除SKSpriteNode(或SKNode)时,类中是否有任何(最佳实践)方法来挂钩事件?
Kobold Kit将回调方法添加didMoveToParent到willMoveFromParent所有 KK*Node 类中。
这是通过子类化所有 SK*Node 类并覆盖相应的addChild和removeChild方法及其变体来实现的。然后,他们根据节点是添加还是删除来调用节点上的类别方法。
不幸的是,我们无法子类化 SKNode 以便向所有 SKNode 类添加方法 - 所有其他 SK*Node 仍将原始 SKNode 作为其父级。除了子类化之外,您还可以在 SKNode 类别中添加自定义 addChild/removeChild 方法(假设 addNode/removeNode)并仅使用这些方法。然后,他们会在调用原始 addChild/removeChild 实现之前向节点发送 willAdd/didRemove 消息。
理论上,这也可以通过混合 SKNode 类上的 addChild/removeChild 方法来完成。但如果我没记错的话,这就是我最初尝试过的,但它不起作用 - 我不记得到底为什么,原因之一可能是 SKNode 的子类可以实现自己的 addChild/removeChild 版本,而无需调用 super实现,或者调用超级实现根本不运行混合方法。另一个原因可能是在内部,addChild/removeChild 方法直接转发到底层 C++ Sprite Kit 引擎,而不是在 SKNode 类层次结构中向上传递。
| 归档时间: |
|
| 查看次数: |
5322 次 |
| 最近记录: |