2016-09-16 45 views
1

没有人知道如何使用Swift以编程方式创建SKTileMapNode吗? (注:我不想做这个使用编辑器,我想要实现这个程序只)以编程方式在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) 

任何帮助,不胜感激

+1

你从来没有真正地制作地图,它如何知道你正在使用的瓷砖,节点知道瓷砖,并为地图创建空间,现在需要实际制作地图,我不知道太多关于这个,所以我无法为你提供答案。 – Knight0fDragon

+0

@ Knight0fDragon你碰巧知道SKTileMapNode是否可以缩放? – Confused

+0

@Confused,我不明白为什么,scale是SKNode的成员(以及xScale yScale是) – Knight0fDragon

回答

3

要使用单个背景平铺布局整个地图,您需要遍历每列和每一行。您需要先检索背景图块。

let tile = bgNode.tileSet.tileGroups.first(
    where: {$0.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创建TileSets和TileMaps功能的初始化器。您仍可以编程方式填写地图。