Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/95.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 何时生成平铺贴图(删除和添加列)?_Ios_Objective C_Sprite Kit - Fatal编程技术网

Ios 何时生成平铺贴图(删除和添加列)?

Ios 何时生成平铺贴图(删除和添加列)?,ios,objective-c,sprite-kit,Ios,Objective C,Sprite Kit,我正在为iOS制作一款无穷无尽的跑步者游戏,现在我正处于地图时代 当地图以固定的速度移动时,它就会工作,它是无限的,而且是随机的。我使用一个数组来保存分片列,如果数组的第一个对象不在屏幕上,我会删除它,然后在它的末尾生成一个新的列 我的问题是,当我想提高地图的速度时,地图生成开始变慢,过了一段时间,地图本身就变慢了,我不知道为什么 我创建了一个从40,0开始的辅助对象SKSpriteNode,我正在改变它的位置,当它小于或等于零时,我移除一列并生成另一列 开始的mapNode.mapSpeed是

我正在为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节点效率很低。更重要的是,如果必须按字符串获取每一行的节点,则效率极低

您在任何给定时间都有固定数量的活动精灵平铺,因此您应该预先分配精灵并将其放入数组或字典中


滚动过屏幕边框的每一列精灵只需更新它们的位置和纹理,就可以成为屏幕上出现的下一列。

你在哪里检查贴图节点的位置?我创建了一个辅助节点来跳过该部分,它以与mapNode相同的速度移动,但当其位置达到0时,它将重置为40,0。我有40个宽平铺,这是在我移除一列并生成另一列时,我的问题是辅助节点和贴图节点不同步。贴图将比生成快,请记住提示,我实现了一个系统,将30列预先分配为一个SKSpirteNode,当其中25列离开屏幕时,它将删除它们并用下一列填充插槽,因此我得到了5列,以防出现问题。我想问一下,如果我不想硬编码25和30,你有什么建议?确定要预加载多少列的最佳实践是什么?基本上,将屏幕大小除以精灵大小,并将宽度/高度加上1:2,最终得到足够的平铺来覆盖屏幕和缓冲行/列