Ho iniziato a fare un piccolo progetto swift/spritekit per insegnare a me stesso game dev. Inizia con una mappa isometrica, che sono riuscito a disegnare. Ma non riesco a trovare una posizione di tocco precisa sulle diverse tessere della mappa. Funziona, ma è leggermente fuori posto e non sembra coerente.Swift Spritekit mappa isometrica touch location
Qui sono le mie funzioni:
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)
}
Con:
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)
}
}
e poi voglio nascondere la piastrella tocco (per le prove):
override func touchesBegan(touches: NSSet, withEvent event: UIEvent)
{
for touch: AnyObject in touches
{
let locationNode = touch.locationInNode(self)
nodeAtPoint(locationNode).hidden = true
}
}
ma lo fa non nascondere sempre la tessera corretta. Quindi come dovrei affrontare questo? Il mio codice è fondamentalmente sbagliato (possibile)? O devo convertire la posizione in coordinate ISO in qualche modo? O giocare con il tile bitmask?
Grazie per il vostro aiuto in ogni caso!
Grande, grazie. Ci proverò presto, e se riuscirò a risolverlo, pubblicherò l'equivalente di Swift. –
Da quando ho postato questo ho iniziato a imparare Swift. Ho aggiornato la mia risposta;) L'ho scritto a memoria e non posso testarlo adesso, quindi potrebbero esserci degli errori – Heyfara