适当的&影响平铺地图中特定图块的有效方法

时间:2016-12-06 21:34:48

标签: ios objective-c sprite-kit grid-layout

就目前而言,我有一个平铺地图,它是一个包含瓷砖的二维数组。没什么特别的:tilesMap [column] [row]。 Tiles是包含tile类型的自定义SKSpriteNode对象,无论它是否可遍历等。

从1个图块到下一个图块的字符移动被固定下来&工作得很好。但是现在我在尝试重构角色移动时遇到了障碍,只能移动到突出显示的选定图块。无论何时选中,这些突出显示的图块都会围绕该角色。

周围瓷砖的当前破碎突出显示正在通过一个讨厌的for循环,只需检查右侧,顶部,左侧和右侧的瓷砖。从角色所在的平铺开始的底部。我设法扩展了通过单个瓷砖进一步检查瓷砖的能力,但它看起来像一个高亮加号。我希望能够轻松突出我希望的任何模式。悲剧是我无法弄清楚如何应用简单输入需要突出显示的平铺模式(可能是一些数字到数组?)的能力。这很重要,因为随着角色的增加,他可以在他周围突出更复杂的瓷砖图案,从而实现更多样化的运动。请帮忙。

1 个答案:

答案 0 :(得分:1)

您可以尝试使用输入参数的递归函数,该参数指示要操作的切片以及递归和输出的深度将是要突出显示的切片阵列。因此,对函数的初始调用将包括起始图块和深度,然后后续调用将在相邻图块和深度中传递 - 1.当深度达到0时,您可以返回图块数组并将其附加到上一次调用。 / p>

这是一个草案示例。您需要为getAdjacentTiles提供自己的实施,FABTile是您的自定义磁贴。

- (NSArray *)tilesToHighlight:(FABTile *)tile withDepth:(int)depth {
    NSMutableArray *result = [NSMutableArray array];
    if (depth == 0) {
        return result;
    }

    NSArray *adjacentTiles = [self getAdjacentTiles:tile];
    for (FABTile *adjacentTile in adjacentTiles) {
        if (![result containsObject:adjacentTile]) {
            [result addObject:adjacentTile];
        }
        NSArray *tilesToHighlight = [self tilesToHighlight:adjacentTile withDepth:depth - 1];
        for (FABTile *tileToHighlight in tilesToHighlight) {
            if (![result containsObject:tileToHighlight]) {
                [result addObject:tileToHighlight];
            }
        }
    }

    return result;
}

像这样调用方法。

NSArray *tilesToHighlight = [self tilesToHighlight:startTile withDepth:2];