给定四边形的四个角位置,填充该四边形之外的所有内容

时间:2018-10-10 09:05:27

标签: ios swift sprite-kit sktilemapnode

我有一个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)
            }
        }    
    }
}

hallwaysroom都是我的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

由于自动平铺不起作用,我的思考过程是用黑色瓷砖填充房间和走廊外部泄漏的所有东西。希望这将强制自动平铺算法将图块正确放置为4面多边形。但是,我不知道如何填充房间外的所有内容。我的替代选择是自己制作自动平铺算法。我想避免这种情况,因为这可能要花几天的时间,而且很麻烦。

0 个答案:

没有答案