4

我听说在 Cocos2d 中使用 CCBatchNode 性能更好。我很难理解它是如何工作的。我有几个 CCSprite 的子类,它们代表我游戏中的对象。到目前为止,我使用该spriteWithFile:方法初始化它们。

我现在有一个包含我所有精灵的精灵表(连同它的 plist 文件)。我应该如何使用它才能受益于“单个 openGL 绘图调用”?

如果我通过在 CCBatchNode 中取回一个帧来初始化我的精灵,它会起作用吗?

无论如何,我对CCBatchNode的理解很糟糕,一些帮助会很棒!

问候

4

1 回答 1

3

这是一个使用 CCSpriteFrameCache 和 CCSpriteBatchNode 的快速示例。

首先设置共享帧缓存(将其视为单个图像的名称与其组合批处理节点图像中的矩形帧之间的映射):

[[CCSpriteFrameCache sharedSpriteFrameCache] addSpriteFramesWithFile:@"spritesheet.plist" textureFile:@"spritesheet.png"];

现在使用组合图像名称创建批处理节点(此 batchNode 为多个精灵进行单次绘制):

CCSpriteBatchNode *batchNode = [CCSpriteBatchNode batchNodeWithFile:@"spritesheet.png" capacity:20];

现在创建传入单个图像名称的精灵节点。将其添加到批处理节点。(同样,batchnode 将执行绘制调用,因此这是性能优势所在):

CCSprite *sprite = [CCSprite spriteWithSpriteFrameName:@"name_of_your_sprite_in_plist"];
[batchNode addChild:sprite];

您可以将 sprite 视为之前直接从单个图像创建的 sprite(但具有使用批处理节点的性能优势)。

于 2012-11-20T18:27:56.793 回答