У меня есть SKTileMapNode, который я заполняю комнатами, используя алгоритм BSP, который я перевел на Swift из этого учебника.Полностью переведенный алгоритм можно найти на моем репозитории github
. У меня есть собственный класс, который дает мне четыре угловых положения комнаты.Я использую четыре угловые позиции, чтобы заполнить все в комнате следующим образом:
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 содержит ошибки, и мне нужно его «сгладить».
Примеры глючного авто-тайлинга:
![Image 2](https://i.stack.imgur.com/kDGeP.png)
Какими они должны быть:
![Image 4](https://i.stack.imgur.com/IePTF.png)
Мой мыслительный процесс, потому что автоматическая мозаика не работает, заключается в заполнении всего, что вытекает наружукомнаты и коридоры с черной плиткой.Надеемся, что это заставит алгоритм автоматического мозаичного размещения правильно размещать плитки как четырехсторонние многоугольники.Однако я не могу понять, как заполнить все за пределами комнат.Мой альтернативный вариант - сам сделать алгоритм автоматического тайлинга.Я хотел бы избежать этого, потому что на это уйдут дни, и это будет хлопотом.