【发布时间】:2020-04-03 10:49:03
【问题描述】:
给定一个SpriteKit场景s和一个T类型的节点a,它继承自s中包含的SKSpriteNode,如果s和a都覆盖任何触摸处理程序,触摸事件仅在似乎是最顶层(最高zPosition)的节点上调用。
如果我希望场景及其节点同时执行两个不同的操作,最好使用哪种模式?
在这种情况下,最好:
- 让场景通过检索触摸发生位置的节点来处理所有触摸?
- 有一个场景将实现的
Touchable协议,并让任何节点通过假设的touched(_ nodeID: Int)方法向场景发送一个标识符? - 是否所有子节点都引用了一个静态
TouchHandler对象来执行这两个操作?
您还有什么建议?
更新:
给定以下代码:
class Parent: SKScene {
override func didMove(to view: SKView) {
self.addChild(Foo())
}
override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
// React to touch, and, for example, move the scene around
}
}
class Foo: SKSpriteNode {
override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
// React to touch, and, for example, scale up the node by 60%
}
}
如果用户点击屏幕上显示的 Foo 节点,则只会调用其 touchesBegan(_, event:) 方法 - Parent 的方法将被忽略。
最好使用什么模式才能让两个对象同时响应touchesBegan(_, event:) 回调?
【问题讨论】:
-
您的问题过于复杂,而且您的问题确实不清楚。首先在你的问题中使用更好的变量名,然后是单个字母。其次,你问哪个更好?其他选择?或询问您的选择是否正确?您应该发布一些示例代码并展示您已经尝试过的内容
-
使用单字符变量名的目的是为了概括。我想我是在问什么模式最适合在触摸时需要两个对象接收触摸事件并同时对其做出反应的场景中使用。我将使用示例代码更新问题。
-
你的意思是并发吗?当代的意思是“生活或发生在同一时期”
-
根据您的上述评论,我仍然支持下面的回答。将您可以从场景中删除的任何代码删除到对象类文件中
-
我的意思是“同时”,是的。我忽略了这两个副词之间的区别,直到现在都可以互换使用;谢谢。
标签: ios sprite-kit skspritenode game-development skscene