Заполните все, что находится вне четырехугольника, учитывая четыре угловые позиции этого четырехугольника - PullRequest
0 голосов
/ 10 октября 2018

У меня есть 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 1 Image 2

Какими они должны быть:

Image 3 Image 4

Мой мыслительный процесс, потому что автоматическая мозаика не работает, заключается в заполнении всего, что вытекает наружукомнаты и коридоры с черной плиткой.Надеемся, что это заставит алгоритм автоматического мозаичного размещения правильно размещать плитки как четырехсторонние многоугольники.Однако я не могу понять, как заполнить все за пределами комнат.Мой альтернативный вариант - сам сделать алгоритм автоматического тайлинга.Я хотел бы избежать этого, потому что на это уйдут дни, и это будет хлопотом.

...