ios - 影响瓷砖 map 中特定瓷砖的正确有效方法

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

就目前而言,我有一个分块 map ,它是一个包含分块的二维数组。没什么特别的:tiledMap[column][row]。瓦片是自定义的 SKSpriteNode 对象,包含瓦片类型、是否可遍历等。

角色从 1 个方 block 移动到下一个方 block 的 Action 被固定且效果很好。但是现在我在尝试重构角色移动以便只能移动到突出显示的选定图 block 时遇到了障碍。每当他被选中时,这些突出显示的方 block 都会围绕在角色周围。

当前损坏的周围图 block 突出显示是通过一个讨厌的 for 循环工作的,该循环只检查从角色所在的图 block 开始的右侧、顶部、左侧和底部的图 block 。我设法通过单个图 block 扩展了检查图 block 的能力,但它看起来像是一个亮点。我希望能够轻松地突出显示我希望的任何类型的模式。悲剧是我无法弄清楚如何应用简单地输入需要突出显示的图 block 模式(也许是一些数字到数组中?)的能力。这很重要,因为随着角色在关卡中的成长,他可以在他周围突出显示更复杂的方 block 图案,从而实现更灵活的移动。请帮忙。

最佳答案

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

这是一个草稿示例。您需要为 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];

关于ios - 影响瓷砖 map 中特定瓷砖的正确有效方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41005332/

相关文章:

ios - 如何在 Sprite Kit 场景外时删除节点

ios - SKSpriteNode 不受自定义 physicsBody 的重力影响

ios - 滚动旋转时 UICollectionView 崩溃(索引路径处补充项目的布局属性已更改但未失效..)

ios - 基础国际化和多 Storyboard无法正常工作

ios - 视频不使用 AVMutableVideoCompositionLayerInstruction 旋转

iphone - iOS uiwebview 回退历史控件

ios - 为什么不调用 CBPeripheralManagerDelegate 方法?

iphone - UITableView - 选择了哪一行?

objective-c - 通过 objective c 在 amazon s3 上上传文件

swift - 如何在 SKCamera 的 View 中识别特定节点?