分块地图生成(删除和添加列) 何时?

Tiled map generation (removing & adding columns) When?

我正在为 iOS 制作一款类似无尽跑酷游戏的游戏,现在我正在生成地图。

当地图以固定速度移动时它起作用,它是无穷无尽的并且是随机的。我正在使用一个数组来保存图块的列,如果数组的第一个对象不在屏幕上,我会删除它,然后在它的末尾生成一个新列。

我的问题是当我想提高地图的速度时,地图生成开始变慢,一段时间后地图本身变得更慢,我不明白为什么。

我创建了一个从 (40,0) 开始的助手 SKSpriteNode,我在改变它的位置的同时改变了地图的位置,当它小于或等于零时,我删除一列并生成一个其他。

起始 mapNode.mapSpeed 是 2.0f,我想随着时间的推移增加不同的值。

self.helperNode.position = CGPointMake(self.helperNode.position.x+self.mapNode.mapSpeed, self.helperNode.position.y);
self.mapNode.position = CGPointMake(self.mapNode.position.x-self.mapNode.mapSpeed, self.mapNode.position.y);

if (self.helperNode.position.x <= 0.0f) {

    [self.mapNode generateNextColumn];

    self.helperNode.position = CGPointMake(40.0f, 0.0f);

    NSArray *array = self.mapNode.map[self.mapNode.rowCount];
    SKSpriteNode *row = [self.mapNode buildNextRowFromArray:array];
    row.position = CGPointMake((self.mapNode.rowCount*40)-20, 0);
    [self.mapNode addChild:row];

    NSString *string = [NSString stringWithFormat:@"row%li",self.mapNode.rowCount-(long)self.mapNode.children.count];
    SKNode *removableRow = [self.mapNode childNodeWithName:string];
    [removableRow removeFromParent];
}

频繁调用"create/remove node"效率很低。更何况,如果你必须通过字符串获取每一行的节点,那是非常低效的。

您在任何给定时间都有固定数量的活动精灵(图块),因此您应该预先分配精灵并将它们放入数组或字典中。

滚动过屏幕边界的每一列 sprite 都会更新它们的位置(和纹理),以便它们成为下一列出现在屏幕上。