我已经构建了一个小 ipad 游戏,到处都是 spritesheets 和 batchnodes。但是我不知道它们是如何工作的,何时添加 Sprite 表,何时将 Sprite 添加到 spritebatchnode 等等。
这是我在初始屏幕(主菜单)中所做的:
CCSpriteBatchNode *spriteSheet = [CCSpriteBatchNode batchNodeWithFile:@"sprites.png"];
screenSize = [CCDirector sharedDirector].winSize;
[[CCSpriteFrameCache sharedSpriteFrameCache] addSpriteFramesWithFile:@"sprites.plist"];
[self addChild:spriteSheet];
在其他类中-我总是需要使用相同的批处理节点->“sprites.png”-我调用
CCSprite *someSprite = [CCSprite spriteWithSpriteFrameName:someSpriteFrameName.png];
并将其添加到
self
.[self addChild:someSprite]; // I do not understand why I would add my sprite to the batch node instead of self
所以情况如下:
我似乎真的没有完全理解这个概念。我大致知道我为什么使用它。但如果有人能用外行的方式再次向我解释一切,我会非常感激,所以我 100% 确定我在做什么。请尽量解释它的基本原理。
马丁
最佳答案
CCSpriteFrameCache
是一个单例,所以它在应用程序生命周期内保持不变。 CCSpriteFrameCache
. CCSpriteFrameCache
单例有 loadedFilenames_
字段(NSMutableSet
的实例)缓存所有场景的所有 Sprite 帧。 CCNode
并在其上创建 Sprite ,您的应用程序将分配这 100 个 CCSprite
对象每 2 秒。 CCSpriteBatchNode
旨在提高性能和更好的内存使用。它的工作原理类似于 UITableView
带有可重复使用的细胞。当您使用可重用单元格滚动表格 View 时,它不会创建新单元格。当必须在屏幕表格 View 上显示新单元格时,只需在屏幕外找到具有相同重用标识符的单元格,并将其内容替换为新内容。
CCSpriteBatchNode
以同样的方式工作。当您尝试向其添加新 Sprite 时,节点会尝试在屏幕外查找未使用的 Sprite 并替换其内容。请记住您添加到
CCSpriteBatchNode
的 Sprite 必须使用用于创建此批处理节点的纹理文件中的纹理。以下示例基于您问题中的代码:
CCSpriteBatchNode *batchNode = [CCSpriteBatchNode batchNodeWithFile:@"sprites.png"];
screenSize = [CCDirector sharedDirector].winSize;
[[CCSpriteFrameCache sharedSpriteFrameCache] addSpriteFramesWithFile:@"sprites.plist"];
[self addChild:batchNode];
CCSprite *someSprite = [CCSprite spriteWithSpriteFrameName:@"someSpriteFrom_sprites.png_.png];
[batchNode addChild:someSprite]; // add sprite to batch node to get all advantages of it
这是一篇关于 CCSpriteBatchNode 性能的好文章:http://www.learn-cocos2d.com/2011/09/cocos2d-spritebatch-performance-test/
关于iphone - 有人可以向我解释 SpriteBatch 节点和 Sprite 表是如何工作的吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11910317/