Kendime oyun devini öğretmek için küçük bir hızlı/spritekit proje yapmaya başladım. Çizmeyi başarabildiğim izometrik bir haritayla başlıyor. Ancak haritanın farklı döşemelerinde hassas bir dokunma noktası elde etme konusunda sorun yaşıyorum. Çalışıyor, ancak biraz bozuk ve tutarlı görünmüyor. Ben (test için) dokunma karo gizlemek istediğinizSwift Spritekit izometrik harita dokunma yeri
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)
}
}
Ve sonra:
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)
}
olarak: Burada
benim fonksiyonlarıoverride func touchesBegan(touches: NSSet, withEvent event: UIEvent)
{
for touch: AnyObject in touches
{
let locationNode = touch.locationInNode(self)
nodeAtPoint(locationNode).hidden = true
}
}
Ama öyle her zaman doğru döşemeyi gizlemez. Peki bununla nasıl başa çıkmalıyım? Kodum temelde yanlış mı (mümkün)? Veya konumu bir şekilde iso koordinatlarına dönüştürmem gerekiyor mu? Ya da fayanslar bitmask ile oynamak?
Her durumda yardımlarınız için teşekkürler!
Büyük kod, teşekkürler Katma Swift sürümü: Ben :) yardımcı
Düzenleme umuyoruz. Bunu yakında deneyeceğim, eğer çalışabilirsem, Swift eşdeğerini yayınlayacağım. –
Bunu yayınladığımdan beri Swift'i öğrenmeye başladım. Cevabımı güncelledim;) Bunu bellekten yazdım ve şu anda test edemiyorum, bu yüzden bazı hatalar olabilir – Heyfara