Mit einem UITapGestureRecognizer
können Sie die berührte Kachel mit der Funktion tileDefinition
von SKTileMapNode
abrufen.
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)
}
Wenn Sie userData im TilemapEditor hinzugefügt haben, kann dieser abgerufen werden. Werte in Userdata enthalten kosten könnten sein durch die Fliese zu bewegen usw.
let data = tile.userData?.value(forKey: "myKey")
Der Vorteil der Verwendung Recognizers ist, dass Tap, Pan und Langes Drücken sauber in separaten Funktionen bearbeitet werden können, die miteinander nicht stören . Sie initialisieren den Gestenerkenner in SKScene
.
override func didMove(to view: SKView) {
let tapGestureRecognizer = UITapGestureRecognizer(target: self, action: #selector(self.handleTapFrom(recognizer:)))
tapGestureRecognizer.numberOfTapsRequired = 1
view.addGestureRecognizer(tapGestureRecognizer)
}
Ich entschuldige mich aufrichtig. Meine Dummheit ist immens. Wohin soll dieser Code gehen? – Confused
Meinen Sie, Pan auf diese Weise verfügbar zu halten, damit der Benutzer eine Kachelkarte, die größer ist als der Bildschirm, schwenken kann, ohne mit Berührungen umgehen zu müssenBegun, touchesMoved usw.? – Confused
Ich weiß nichts über Gestenerkenner. Lesen Sie hier, es scheint, dass sie in jeder Ansicht angebracht/geschrieben werden können. https://developer.apple.com/library/content/documentation/EventHandling/Conceptual/EventHandlingiPhoneOS/GestureRecognizer_basics/GestureRecognizer_basics.html .... ist, dass ein SKView SpriteKit einzige Unterklasse von UIView ist, ist das, wo dies in Reihenfolge gehen muss vom System angerufen werden? – Confused