我有一个SKTileMapNode,我正在使用从this教程翻译成Swift的BSP算法填充房间。可以在我的github repo
上找到完全翻译的算法我有一个自定义类,可以给我一个房间的四个角位置。我使用四个角位置填充房间中的所有内容,如下所示:
for row in 0..<tileMap.numberOfColumns {
for column in 0..<tileMap.numberOfRows {
for room in rooms {
// iterate through each room and draw it in
if room.minX <= column && room.maxX >= column && room.minY <= row && room.maxY >= row {
tileMap.setTileGroup(tileGroup2, forColumn: column, row: row)
}
}
for hallway in hallways {
// iterate through each hallway and draw it in
if hallway.minX <= column && hallway.maxX >= column && hallway.minY <= row && hallway.maxY >= row {
tileMap.setTileGroup(tileGroup2, forColumn: column, row: row)
}
}
}
}
hallways
和room
都是我的Room
类的数组,它们都具有四个角位置。
class Room {
var minX:Int
var maxX:Int
var minY:Int
var maxY:Int
var center:CGPoint
init(X: Int, Y: Int, W: Int, H: Int) {
minX = X
maxX = X + W
minY = Y
maxY = Y + H
center = CGPoint(x: (minX + maxX) / 2, y: (minY + maxY) / 2)
}
}
我知道如何填充房间内的所有内容,但是如何填充房间外的其他所有内容?我似乎无法弄清楚。而if room.minX >= column && room.maxX <= column && room.minY >= row && room.maxY <= row
总是失败。
我需要填充“泄漏”在房间外面的所有东西,因为苹果公司的SKTileMapNode自动平铺存在错误,并且我需要“平滑”它。
错误的自动平铺示例:
应该是什么:
由于自动平铺不起作用,我的思考过程是用黑色瓷砖填充房间和走廊外部泄漏的所有东西。希望这将强制自动平铺算法将图块正确放置为4面多边形。但是,我不知道如何填充房间外的所有内容。我的替代选择是自己制作自动平铺算法。我想避免这种情况,因为这可能要花几天的时间,而且很麻烦。