Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/24.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
Cocos2d iphone CCSpriteBatchNode的角色_Cocos2d Iphone - Fatal编程技术网

Cocos2d iphone CCSpriteBatchNode的角色

Cocos2d iphone CCSpriteBatchNode的角色,cocos2d-iphone,Cocos2d Iphone,CCSpriteBatchNode背后的思想是为多个精灵渲染一次纹理,这将提高性能,而不是将每个精灵视为不同的纹理 然而,我很困惑,使用它与只使用一个纹理图集相比有什么好处。如果使用以下方法创建纹理: [[CCSpriteFrameCache sharedSpriteFrameCache] addSpriteFramesWithFile:@"gameTexture.plist"]; 然后,使用frame方法提取用于精灵的每个图像,那么,即使从未引入批处理节点,所有图像不是都使用相同的单一渲染纹

CCSpriteBatchNode背后的思想是为多个精灵渲染一次纹理,这将提高性能,而不是将每个精灵视为不同的纹理

然而,我很困惑,使用它与只使用一个纹理图集相比有什么好处。如果使用以下方法创建纹理:

[[CCSpriteFrameCache sharedSpriteFrameCache] addSpriteFramesWithFile:@"gameTexture.plist"];
然后,使用
frame
方法提取用于精灵的每个图像,那么,即使从未引入批处理节点,所有图像不是都使用相同的单一渲染纹理吗


当然,您可以将batchnode与纹理图集结合使用,但这是如何提高性能的呢?如果不使用batchnode,它是否会多次渲染纹理,即使它已缓存?

使用相同的纹理,您不会在每次调用时更改纹理,但仍会以不同的glBegin和Ends渲染所有精灵,使用CCSpriteBatchNode将确保其中的每个精灵都在同一个调用中呈现

性能改进简单来自OpenGL调用数量的减少。如果不使用SpritBatchNode,您的精灵将来自一个纹理yes,但它们都将单独调用OpenGL。批处理节点对象包含收集其所有子节点并仅进行一次调用的代码,这就是为什么您的精灵必须是同一批处理节点的子节点才能获得性能提升的原因

0批处理节点+100个精灵=100个OpenGL调用

1个批处理节点+100个精灵(此批处理节点的子节点)=1个OpenGL调用

如果你真的感兴趣,可以看看CCSpriteBatchNode.m