Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/23.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 使用Spritekit批渲染精灵_Ios_Objective C_Sprite Kit - Fatal编程技术网

Ios 使用Spritekit批渲染精灵

Ios 使用Spritekit批渲染精灵,ios,objective-c,sprite-kit,Ios,Objective C,Sprite Kit,我正在学习ios游戏编程,我需要创建自己的tile背景——我们正在从java迁移一款无限地图风格的游戏 我有以下代码在循环中呈现背景平铺图形: SKSpriteNode *sprite = [SKSpriteNode spriteNodeWithImageNamed:@"shallow_1.png"]; sprite.position = CGPointMake(x,y); [self addChild:sprite]; 不过,我正在尝试了解如何在spritekit中正确地批渲染。在java/

我正在学习ios游戏编程,我需要创建自己的tile背景——我们正在从java迁移一款无限地图风格的游戏

我有以下代码在循环中呈现背景平铺图形:

SKSpriteNode *sprite = [SKSpriteNode spriteNodeWithImageNamed:@"shallow_1.png"];
sprite.position = CGPointMake(x,y);
[self addChild:sprite];
不过,我正在尝试了解如何在spritekit中正确地批渲染。在java/opengl中,我们将应用纹理,添加所有渲染位置,然后一次渲染所有内容-节省性能


如何使用spritekit正确批量渲染这些瓷砖?我找不到任何信息。

如果您打算使用tilemaps,最好的选择是KoboldKit

它是SpriteKit的游戏引擎,并添加到框架中


中包括对时间贴图的支持。

加载纹理一次:

SKTexture *texture = [SKTexture textureWithImageNamed:@"shallow_1.png"];
然后,使所有SKSpriteNode对象都引用该纹理:

// inside loop
SKSpriteNode *node = [SKSpriteNode spriteNodeWithTexture:texture];

可以使用SKTextureAtlas预加载纹理,使用zPosition一次绘制层。这应该有帮助。批处理是自动的-如果连续的子精灵使用相同的纹理和混合模式,它们将被批处理绘制。启用调试标签以查看draw callsOk,这样调用SKSpriteNode*sprite=[SKSpriteNode spritenodewhichimagenamed:@shallow_1.png]就没有什么害处了;循环的每一次迭代?似乎没有必要,在另一种语言中,我们会加载它一次,然后进行克隆。在opengl中,我们只应用一次纹理,然后只传递一个顶点列表。似乎有。渲染约170个节点的这些瓷砖的完整背景会将FPS降低到40。这看起来很有用,它说它支持没有大小限制的tilemap,但tilemap通常指固定大小或无限水平。它是否支持在各个方向上生成噪音、分块拼接?噪音生成是您需要自己在代码中完成的事情。只要你能生成一些平铺贴图组件可以理解的东西,你就应该很好。你想要一个无限的平铺贴图。。。这可能很棘手。你最好单独问一个关于实现这一目标的最佳策略的问题,例如,在单独的相邻平铺地图上移动角色。