Ios 适当及;影响平铺贴图中特定平铺的有效方法

Ios 适当及;影响平铺贴图中特定平铺的有效方法,ios,objective-c,sprite-kit,grid-layout,Ios,Objective C,Sprite Kit,Grid Layout,目前,我有一个平铺贴图,它是一个包含平铺的2D数组。没什么特别的:平铺贴图[列][行]。tile是自定义的SKSpriteNode对象,包含tile类型、是否可遍历等 角色从一个平铺移动到下一个平铺是固定的&效果很好。但现在我遇到了一个障碍,当我试图重构角色移动时,只能移动到高亮显示的选定平铺。每当角色被选中时,这些高亮显示的平铺都会围绕着他 当前周围瓷砖的断开高亮显示正在通过一个讨厌的for循环进行工作,该循环仅从角色所在的瓷砖开始检查右侧、顶部、左侧和底部的瓷砖。我成功地扩展了通过单个磁贴进

目前,我有一个平铺贴图,它是一个包含平铺的2D数组。没什么特别的:平铺贴图[列][行]。tile是自定义的SKSpriteNode对象,包含tile类型、是否可遍历等

角色从一个平铺移动到下一个平铺是固定的&效果很好。但现在我遇到了一个障碍,当我试图重构角色移动时,只能移动到高亮显示的选定平铺。每当角色被选中时,这些高亮显示的平铺都会围绕着他


当前周围瓷砖的断开高亮显示正在通过一个讨厌的for循环进行工作,该循环仅从角色所在的瓷砖开始检查右侧、顶部、左侧和底部的瓷砖。我成功地扩展了通过单个磁贴进一步检查磁贴的功能,但它看起来像一个加亮显示。我希望能够轻松地突出任何类型的图案。不幸的是,我不知道如何应用这种能力来简单地输入需要突出显示的平铺图案(可能是数组中的一些数字?)。这一点很重要,因为随着角色级别的增加,他周围可以突出显示更复杂的瓷砖图案,从而实现更灵活的移动。请提供帮助。

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

这是一个草稿示例。您需要为
getAdjacentTiles
提供自己的实现,
FABTile
是您的自定义tile

- (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];

嗯,我试着弄明白如何应用这个,但是我遇到了一些困难。目前,我有一个方法可以将tiles索引作为CGPoint返回。我该如何转换斐波那契来处理这个结构呢?我更新了这个例子,应该可以让你接近一个解决方案。这很有帮助。我很想看看这将如何工作,因为我很快就需要它:)工作得很好。我的“getAdjacentTiles”方法以标准方式检查每个磁贴:检查右、上、左和下磁贴。