首页 > 解决方案 > 给定四边形的四个角位置,填充四边形之外的所有内容

问题描述

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

Wherehallwaysroomare 我班级的两个数组都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 自动平铺有问题,我需要“平滑”它。

错误自动平铺的示例:

图 1 图 2

他们应该是什么:

图 3 图 4

我的想法是,因为自动平铺不起作用,所以用黑色瓷砖填充房间和走廊外泄漏的所有东西。希望这会强制自动平铺算法将图块正确放置为 4 面多边形。然而,我不知道如何填满房间外的所有东西。我的替代选择是自己制作一个自动平铺算法。我想避免这种情况,因为制作需要几天时间,而且很麻烦。

标签: iosswiftsprite-kitsktilemapnode

解决方案


推荐阅读