Я пытаюсь создать ландшафт для своей игры с помощью двухслойных узлов SKTileMapNode: слоя base
(земля, вода и т. Д.) И слоя main
(здания, игроки, стены), где основным слоем является поверх базового слоя. Вот мой код GameScene.swift:
import SpriteKit
import GameplayKit
class GameScene: SKScene {
var map:SKTileMapNode!
var base:SKTileMapNode!
var tileSet:SKTileSet!
var ground:SKTileGroup!
var wall:SKTileGroup!
var cam:SKCameraNode?
var viewController:GameViewController!
override func didMove(to view: SKView) {
tileSet = SKTileSet(named: "Tiles")
ground = tileSet.tileGroups.first{$0.name == "Ground"}
wall = tileSet.tileGroups.first{$0.name == "Wall"}
map = SKTileMapNode(tileSet: tileSet, columns: 20, rows: 20, tileSize: CGSize(width:64, height:32))
base = SKTileMapNode(tileSet: tileSet, columns: 20, rows: 20, tileSize: CGSize(width:64, height:32))
base.fill(with:ground)
self.addChild(base)
base.addChild(map)
cam = SKCameraNode()
self.camera = cam
self.addChild(cam!)
}
override func touchesEnded(_ touches: Set<UITouch>, with event: UIEvent?) {
for i in 0...9 {
for j in 0...9 {
set(i,j,wall)
}
}
}
func set(_ x:Int,_ y:Int,_ t:SKTileGroup){
map.setTileGroup(t, forColumn: x, row: y)
}
override func update(_ currentTime: TimeInterval) {
}
}
Код внутри блока touchesEnded
предназначен только для тестирования, заполнив область 10x10 настенными плитками. Однако когда этот код запускается, ничего не происходит. Используя операторы печати, я обнаружил, что tileGroup каждой плитки изменяется только в рамках метода set
, и map
остается неизменным вне этого метода.
Я что-то упустил с глобальными / локальными переменными. или это другая проблема? Я относительно новичок в программировании на swift и iOS, поэтому я прошу прощения, если это простой вопрос, но я не смог найти никакого ответа онлайн. Я ценю любую помощь, которую я могу получить. Спасибо!