С учетом SpriteKit
сцены s
и одного узла a
типа T
, который наследуется от SKSpriteNode
, содержащегося в s
, если оба параметра s
и a
перекрывают любой обработчик касания, событие касания вызывается исключительно для того, что кажется самым верхним (самым высоким zPosition
) узлом.
Если бы я хотел, чтобы сцена и ее узел одновременно выполняли два разных действия, какой паттерн лучше всего использовать?
В этом случае было бы лучше :
- Пусть сцена обрабатывает все касания, извлекая узлы в месте, где произошло касание?
- Есть протокол
Touchable
, что сцена будет реализовать и заставить какой-либо узел отправлять идентификатор на сцену с помощью гипотетического touched(_ nodeID: Int)
метода? - Все ли дочерние узлы ссылаются на объект stati c
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:)
?