hel*_*on3 3 objective-c ios sprite-kit
使用SpriteKit处理iOS游戏.我的背景由地图图块组成(本质上是一个无限的图,程序生成).
我们的系统旨在管理地图的"块",我们只在播放器附近加载块.由于SpriteKit需要我们添加SKSpriteNodes,我们不再对不再靠近播放器的块/块的"卸载"精灵进行干净控制.
我意识到SpriteKit实际上不会在屏幕外渲染事物,但是如果我们无法移除不再需要的精灵,或者检查是否已经添加了块/块,它将会破坏性能.
既然SKNodes没有回应isEqual:,我只看到两种方法:
如果已添加精灵,有没有更简单的检查/删除方法?也许精灵名称上的部分字符串匹配?
我不确定使用SpriteKit是最好的解决方案(Xcode模拟器似乎以30fps的速度拖动,尚未在真实设备上进行测试).我们最初用Java构建这个游戏,我们正在渲染我们自己的纹理 - 因此只能加载并可以手动输入到opengl中.
-(void) renderToScene:(SKScene *)scene {
for( Chunk *chunk in loadedChunks ){
for( Tile *tile in [chunk getTiles] ){
SKSpriteNode *sprite = [SKSpriteNode spriteNodeWithTexture:tileTexture];
sprite.name = @"Tile";
sprite.position = CGPointMake(realX,realY);
[scene addChild:sprite];
}
}
}
Run Code Online (Sandbox Code Playgroud)
事实上,杀死你的帧率通常是创建和删除节点 - 你应该有一个精灵池,你可以重复使用而不是重新创建.
只需重新使用精灵的纹理,位置和其他属性,重新使用其中一个不再需要的属性.一个常见的用例是让足够的图块跨越整个屏幕加上一行和一列,这样当整个行或列移出屏幕外,您可以根据地图数据使用新纹理在另一侧重新定位它.