在 Swift 中以编程方式创建 SKTileMapNode
Programmatically create SKTileMapNode in Swift
有人知道如何使用 Swift 以编程方式创建 SKTileMapNode 吗? (注意:我不想使用编辑器执行此操作,我只想以编程方式实现此操作)
我已经尝试了以下但没有渲染我的瓷砖地图
let bgTexture = SKTexture(imageNamed: "background")
let bgDefinition = SKTileDefinition(texture: bgTexture, size: bgTexture.size())
let bgGroup = SKTileGroup(tileDefinition: bgDefinition)
let tileSet = SKTileSet(tileGroups: [bgGroup])
let bgNode = SKTileMapNode(tileSet: tileSet, columns: 5, rows: 5, tileSize: bgTexture.size())
bgNode.position = CGPoint(x: self.frame.size.width / 2, y: self.frame.size.height / 2)
bgNode.setScale(1)
self.addChild(bgNode)
非常感谢任何帮助
要使用单个背景图块布置整个地图,您需要遍历每一列和每一行。您需要先检索背景图块。
let tile = bgNode.tileSet.tileGroups.first(
where: {[=10=].name == "background"})
for column in 0..4 {
for row in 0..4 {
bgNode.setTileGroup(tile, forColumn: column, row: row)
}
}
还有一个方便的函数可以实现泛洪填充;
bgNode.fill(with: tile)
还有一个 SKTilemapNode
的初始化程序接受 SKTileGroup
let bgNode = SKTileMapNode(tileSet: tileSet, columns: 5, rows: 5, tileSize: bgTexture.size(), fillWithTileGroup: tile)
我强烈建议利用 Xcode 中内置的功能来创建 TileSet 和 TileMap。您仍然可以通过编程方式填充地图。
如果它对任何人都有帮助,这里是所有的东西:
class MyGameScene: SKScene {
override func didMove(to view: SKView) {
guard let tileSet = SKTileSet(named: "testset") else {
// hint: don't use the filename for named, use the tileset inside
fatalError()
}
let tileSize = tileSet.defaultTileSize // from image size
let tileMap = SKTileMapNode(tileSet: tileSet, columns: 5, rows: 5, tileSize: tileSize)
let tileGroup = tileSet.tileGroups.first
tileMap.fill(with: tileGroup) // fill or set by column/row
//tileMap.setTileGroup(tileGroup, forColumn: 5, row: 5)
self.addChild(tileMap)
}
}
有人知道如何使用 Swift 以编程方式创建 SKTileMapNode 吗? (注意:我不想使用编辑器执行此操作,我只想以编程方式实现此操作)
我已经尝试了以下但没有渲染我的瓷砖地图
let bgTexture = SKTexture(imageNamed: "background")
let bgDefinition = SKTileDefinition(texture: bgTexture, size: bgTexture.size())
let bgGroup = SKTileGroup(tileDefinition: bgDefinition)
let tileSet = SKTileSet(tileGroups: [bgGroup])
let bgNode = SKTileMapNode(tileSet: tileSet, columns: 5, rows: 5, tileSize: bgTexture.size())
bgNode.position = CGPoint(x: self.frame.size.width / 2, y: self.frame.size.height / 2)
bgNode.setScale(1)
self.addChild(bgNode)
非常感谢任何帮助
要使用单个背景图块布置整个地图,您需要遍历每一列和每一行。您需要先检索背景图块。
let tile = bgNode.tileSet.tileGroups.first(
where: {[=10=].name == "background"})
for column in 0..4 {
for row in 0..4 {
bgNode.setTileGroup(tile, forColumn: column, row: row)
}
}
还有一个方便的函数可以实现泛洪填充;
bgNode.fill(with: tile)
还有一个 SKTilemapNode
的初始化程序接受 SKTileGroup
let bgNode = SKTileMapNode(tileSet: tileSet, columns: 5, rows: 5, tileSize: bgTexture.size(), fillWithTileGroup: tile)
我强烈建议利用 Xcode 中内置的功能来创建 TileSet 和 TileMap。您仍然可以通过编程方式填充地图。
如果它对任何人都有帮助,这里是所有的东西:
class MyGameScene: SKScene {
override func didMove(to view: SKView) {
guard let tileSet = SKTileSet(named: "testset") else {
// hint: don't use the filename for named, use the tileset inside
fatalError()
}
let tileSize = tileSet.defaultTileSize // from image size
let tileMap = SKTileMapNode(tileSet: tileSet, columns: 5, rows: 5, tileSize: tileSize)
let tileGroup = tileSet.tileGroups.first
tileMap.fill(with: tileGroup) // fill or set by column/row
//tileMap.setTileGroup(tileGroup, forColumn: 5, row: 5)
self.addChild(tileMap)
}
}