Используя UITapGestureRecognizer
, вы можете получить тротуарную плиту, используя функцию tileDefinition
от SKTileMapNode
.
func handleTapFrom(recognizer: UITapGestureRecognizer) {
if recognizer.state != .ended {
return
}
let recognizorLocation = recognizer.location(in: recognizer.view!)
let location = self.convertPoint(fromView: recognizorLocation)
guard let map = childNode(withName: "background") as? SKTileMapNode else {
fatalError("Background node not loaded")
}
let column = map.tileColumnIndex(fromPosition: location)
let row = map.tileRowIndex(fromPosition: location)
let tile = map.tileDefinition(atColumn: column, row: row)
}
Затем, если вы добавили userData в TilemapEditor, это можно восстановить. Значения, которые включают в USERDATA может стоить для перемещения через плитки и т.д.
let data = tile.userData?.value(forKey: "myKey")
Преимущество использования распознавателей является то, что Tap, Pan и Длительное нажатие может осуществляться чисто в отдельных функциях, которые не мешают друг другу , Вы инициализируете распознаватель жестов в SKScene
.
override func didMove(to view: SKView) {
let tapGestureRecognizer = UITapGestureRecognizer(target: self, action: #selector(self.handleTapFrom(recognizer:)))
tapGestureRecognizer.numberOfTapsRequired = 1
view.addGestureRecognizer(tapGestureRecognizer)
}
Мои искренние извинения. Моя глупость огромна. Куда должен идти этот код? – Confused
Вы хотите держать Pan доступным таким образом, чтобы пользователь мог кадрировать вокруг плитки больше, чем экран без необходимости обращаться с touchhesBegun, touchhesMoved и т. Д.? – Confused
Я ничего не знаю о распознавателях жестов. Читая здесь, кажется, что они могут быть прикреплены/записаны в любой вид. https://developer.apple.com/library/content/documentation/EventHandling/Conceptual/EventHandlingiPhoneOS/GestureRecognizer_basics/GestureRecognizer_basics.html .... поскольку SKView является единственным подклассом SpriteKit UIView, заключается в том, что там, где это должно идти в порядке для вызова системы? – Confused