【发布时间】:2013-11-09 19:59:55
【问题描述】:
我正在使用 SpriteKit 的碰撞检测。它有一个如下所示的回调:
- (void)didBeginContact:(SKPhysicsContact *)contact
接触对象有两个物理体:
SKPhysicsBody *bodyA;
SKPhysicsBody *bodyB;
我的游戏会有很多对象,当然我可以测试categoryBitMask 以找出碰撞的对象。但是考虑到我打算有很多种类(当然不超过 32 种)并且可能会动态引入新类型,那么进行动态双重调度以编码碰撞、爆炸、得分等逻辑的最优雅的方法是什么?从所有这些碰撞中?当然,我可以构建一个巨大的毛茸茸的 if 语句,但我希望有更干净的东西。
也许是一个查找表,用于存储适当处理程序的选择器?然后我通过categoryBitMasks的某种组合来索引查找表?我很想听听一些建议。
【问题讨论】:
-
您可以给关联的节点起一个名字,然后将这些名字用作选择器字典中的键。
-
我在 SKPhysicsBody 类上看不到 name 属性。您的意思是添加一个具有关联引用的类别来存储名称吗?
-
物理实体没有名字,它们的节点有。我可能会先尝试,但如果您决定不将它们附加到
SKNodes,那么您所说的关联对象将起作用。 -
嗯,当然。谢谢,听起来应该可以。
标签: objective-c sprite-kit dispatch double-dispatch