我是靠谱客的博主 活力麦片,最近开发中收集的这篇文章主要介绍使用SpriteBatchNode时出现CCSprite is not using the same texture id错误,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

在屏幕上贴图时,图形硬件需要经过准备、渲染、清除等步骤。每次贴图都会重复这个过程。如果图形硬件能事先知道有一组拥有相同纹理的Sprite需要渲染,则这个过程会被简化。比如,一组Sprite的准备和清除动作总共只需要执行一次。

下图的例子使用了CCSpriteBacthNode。屏幕上同时有几百颗子弹飞过。如果一次只渲染一颗,那么帧率马上降到85%。使用CCSpriteBatchNode,可以避免这种情况:

 

通常我们这样创建一个CCSprite:

CCSprite* sprite=[CCSprite spriteWithFile:@”bullet.png”];

[self addChild:sprite];

而使用CCSpriteBatchNode 则需要修改为:

CCSpriteBatchNode* batch=[CCSpriteBatchNode batchNodeWithFile:@”bullet.png”];

[self addChild:batch];

for(int i=0;i<100;i++){

CCSprite* sprite=[CCSprite spriteWithFile:@”bullet.png”];

[batch addChild:bullet];

}

注意,CCSpriteBatchNode需要一个图片文件名作为参数,哪怕它根本用不着这个图片(进行显示)。可以把它看做是一个Layer,你可以用它来加入一些CCSprite节点。由于它使用了一个图片文件作为构造参数,所以在后面加入的CCSprite中必须使用相同的文件作为构造参数,否则会导致如下错误:

SpriteBatches[13879:207] *** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'CCSprite is not using the same texture id'

当采用相同纹理的CCSpite越多,则采用CCSpriteBatchNode的好处越明显。

但这有一个限制,所有的CCSprite节点都会位于同一个Z坐标(深度)上。如果子弹是“击穿”敌人并向后飞,你得使用两个Z轴不同的CCSpriteBatchNode。

另外一个限制是,CCSpriteBatchNode和加入其中的CCSprite必须使用相同的贴图。这一点在使用Texture Atlas时尤其显得重要。一个Texture Atlas可以画多个不同的图片,并且这些图片使用同一个CCSpriteBatchNode,以提高渲染速度。(Texture指纹理或贴图,Atlas指集,Texture Atlas就是纹理集,就是小图合成的一个大图,而TexturePacker是把一张图或多张图打成纹理集的工具,同时会有一个plist文件)

Texture Atlas用法

CCSpriteFrameCache::sharedSpriteFrameCache()->addSpriteFramesWithFile(“A.plist”);

CCSpriteBatchNode* batchNode = CCSpriteBatchNode::create("A.png", 50);

CCSprite* sprite1 = CCSprite::createWithSpriteFrameName("精灵帧1的名字");

CCSprite* sprite2 = CCSprite::createWithSpriteFrameName("精灵帧2的名字");

//注:游戏资源里所有plist里的精灵帧的名字最好不要一样。否则当执行上面两行的时候,得到的精灵可能是其他plist下的Texture(纹理),这时候就可能会提示"CCSprite is not using the same texture id"这个错误了。

batchNode->addChild(sprite1);

batchNode->addChild(sprite2);

this->addChild(batchNode);

Z轴的问题可以通过指定CCSpriteBatchNode中单个CCSprite的Z值来解决。如果你所有的图片都放到了一个Texture Atlas(纹理集),则你完全可以只使用一个CCSpriteBatchNode。

把CCSpriteBatchNode看成一个简单的CCLayer,它只接受使用相同图片的CCSprite,这样,你就知道怎么用它了。

最后

以上就是活力麦片为你收集整理的使用SpriteBatchNode时出现CCSprite is not using the same texture id错误的全部内容,希望文章能够帮你解决使用SpriteBatchNode时出现CCSprite is not using the same texture id错误所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(51)

评论列表共有 0 条评论

立即
投稿
返回
顶部