我试图以编程方式为RPG风格的游戏中的对话框文本创建一个灵活的对话框。我设计了一个简单的盒子图形,将其划分为所有正确的部分,并将其作为8向邻接组添加到我的图块集中。
我可以成功将其添加到我的相机节点,但是自动映射不起作用。我所得到的只是一个由中心瓷砖组成的黑色实心盒子。根据{{3}},enableAutomapping“指定图块贴图是否使用场景编辑器之类的自动映射行为,”因此,我相信此设置应该对我有帮助。
它只选择中间的图块,忽略所有的边/角,我得到一个纯黑框。我要寻找的行为是让SpriteKit根据要创建的形状选择合适的边缘和内部瓷砖。
这是我的代码(Swift 4.2)当前的样子:
autocmd InsertEnter * :highlight LineNr ctermfg=blue ctermbg=red
autocmd InsertLeave * :highlight LineNr ctermfg=blue ctermbg=red
答案 0 :(得分:0)
关于以编程方式使用SpriteKit和SKTileMapNodes的建议:在尝试使用代码进行编辑之前,请了解编辑器如何在Xcode中工作。问完问题后,我决定在编辑器中构建它,并意识到我的图块地图节点的概念模型不正确。
我能够通过意识到启用自动映射功能来解决我的问题,您只需要绘制形状的中心即可。边缘被填充,并且TileMapNode的大小必须能够容纳边缘块。我必须将TileMapNode稍大一些。
现在可以使用。这是代码(Swift 4.2):
func createDialogBox(string: String) {
let dialogTileSet = SKTileSet(named: "Dialog")!
for tileGroup in dialogTileSet.tileGroups {
for tileRule in tileGroup.rules {
for tileDefinition in tileRule.tileDefinitions {
for texture in tileDefinition.textures {
texture.filteringMode = .nearest
}
}
}
}
let tileSize = CGSize(width: 32, height: 32)
let rows = 5, cols = 14 // Increased the size of the tile map node.
let dialogBox = SKTileMapNode(tileSet: dialogTileSet,
columns: cols,
rows: rows,
tileSize: tileSize)
dialogBox.enableAutomapping = true
// Just draw the center line. Automapping will take care of the surrounding edges.
for col in 2...11 {
dialogBox.setTileGroup(dialogTileSet.tileGroups.first, forColumn: col, row: 2)
}
dialogBox.zPosition = 2
dialogBox.position = CGPoint(x: 48, y: -128)
self.camera?.addChild(dialogBox)
}