我有一个 SKTileMapNode,我使用从本教程翻译成 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)
}
}
}
}
Wherehallways
和room
are 我班级的两个数组都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
总是失败。
我需要填充房间外“泄漏”的所有内容,因为 Apple 的 SKTileMapNode 自动平铺有问题,我需要“平滑”它。
错误自动平铺的示例:
他们应该是什么:
我的想法是,因为自动平铺不起作用,所以用黑色瓷砖填充房间和走廊外泄漏的所有东西。希望这会强制自动平铺算法将图块正确放置为 4 面多边形。然而,我不知道如何填满房间外的所有东西。我的替代选择是自己制作一个自动平铺算法。我想避免这种情况,因为制作需要几天时间,而且很麻烦。