Ich habe angefangen, ein kleines Swift/Spritekit-Projekt zu machen, um mich selbst Spiel-Dev zu lehren. Es beginnt mit einer isometrischen Karte, die ich zeichnen konnte. Aber ich habe Probleme, eine genaue Touch-Position auf den verschiedenen Kacheln der Karte zu bekommen. Es funktioniert, ist aber etwas fehl am Platz und scheint nicht konsistent.Swift Spritekit isometrische Karte Touch-Location
Hier sind meine Funktionen:
class PlayScene: SKScene {
let map = SKNode()
override func didMoveToView(view: SKView) {
let origin = view.frame.origin
let mapOrigin = CGPointMake(origin.x + self.frame.width/4, origin.y - self.frame.height/4)
let mapConfig: Int[][] =
[[0, 0, 0, 0, 1, 0, 0, 0],
[0, 0, 0, 0, 1, 0, 0, 0],
[0, 0, 0, 0, 1, 0, 0, 0],
[2, 2, 2, 2, 1, 2, 2, 2],
[0, 0, 0, 0, 1, 0, 0, 0],
[0, 0, 0, 0, 1, 0, 0, 0],
[0, 0, 0, 0, 1, 0, 0, 0],
[0, 0, 0, 0, 1, 0, 0, 0]]
drawMap(mapConfig, mapOrigin: mapOrigin)
}
mit:
override func touchesBegan(touches: NSSet, withEvent event: UIEvent)
{
for touch: AnyObject in touches
{
let locationNode = touch.locationInNode(self)
nodeAtPoint(locationNode).hidden = true
}
}
Aber es tut:
func drawMap(mapConfig:Int[][], mapOrigin:CGPoint)
{
let tileHeight:CGFloat = 25.5
let numColumns:Int = 8
let numRows:Int = 8
var position = mapOrigin
var column: Int = 0
var row: Int = 0
for column = 0; column < numColumns; column++
{
for row = 0; row < numRows; row++
{
position.x = mapOrigin.x + CGFloat(column) * tileHeight
position.y = mapOrigin.y + CGFloat(row) * tileHeight
let isoPosition = twoDToIso(position)
placeTile(isoPosition, mapConfig: mapConfig[row][column])
}
}
self.addChild(map)
}
func placeTile(position:CGPoint, mapConfig:Int)
{
switch mapConfig
{
case 0:
let sprite = SKSpriteNode(imageNamed:"grassTile")
sprite.position = position
sprite.setScale(0.1)
sprite.name = "\(position)"
self.map.addChild(sprite)
case 1:
let sprite = SKSpriteNode(imageNamed:"roadTile")
sprite.position = position
sprite.setScale(0.1)
sprite.name = "\(position)"
self.map.addChild(sprite)
default:
let sprite = SKSpriteNode(imageNamed:"roadTileLTR")
sprite.position = position
sprite.setScale(0.1)
sprite.name = "\(position)"
self.map.addChild(sprite)
}
}
Und dann habe ich die Fliese I berühren (zum Testen) ausblenden möchten nicht immer die richtige Kachel verstecken. Also, wie soll ich das angehen? Ist mein Code grundsätzlich falsch (möglich)? Oder muss ich den Ort irgendwie in Iso-Koordinaten umwandeln? Oder mit der Fliesen-Bitmaske spielen?
Danke für Ihre Hilfe auf jeden Fall!
Großen Dank. Ich werde das bald versuchen, und wenn ich es ausarbeiten kann, wird das Swift-Äquivalent posten. –
Seit ich das geschrieben habe, fing ich an Swift zu lernen. Ich habe meine Antwort aktualisiert;) Ich habe das aus dem Speicher geschrieben und ich kann es jetzt nicht testen, also könnte es einige Fehler geben – Heyfara