cocos2d-iphone – Cocos2d的CCSpriteBatchNode抱怨不同的纹理ID

cocos2d-iphone – Cocos2d的CCSpriteBatchNode抱怨不同的纹理ID,第1张

概述我正在尝试使用CCSpriteBatchNode优化我的游戏,一次渲染多个精灵.但是,由于某些原因,当我引入CCSpriteBatchNode作为我的精灵的父级时,cocos2d给了我这个错误: "CCSprite is not using the same texture id" 我很困惑,因为我有一个1024×1024纹理图集和我的所有图形.它是使用TexturePacker创建的,没有批处理 我正在尝试使用CCSpriteBatchNode优化我的游戏,一次渲染多个精灵.但是,由于某些原因,当我引入CCSpriteBatchNode作为我的精灵的父级时,cocos2d给了我这个错误:

"CCSprite is not using the same texture ID"

我很困惑,因为我有一个1024×1024纹理图集和我的所有图形.它是使用TexturePacker创建的,没有批处理节点,一切正常.我一直在加载它:

[[CCSpriteFrameCache sharedSpriteFrameCache] addSpriteFramesWithfile:@"atlas1.pList"];

现在我正在尝试使用CCSpriteBatchNode:

CCSprite* sprite = [CCSprite spriteWithSpriteFramename:@"something.png"];CCSpriteBatchNode* bar = [CCSpriteBatchNode batchNodeWithfile:@"atlas1.png"];[bar addChild: sprite]; // assert error here

我尝试将一些NSLog调试输出添加到cocos2d纹理初始化/查找代码中,并且令人惊讶的是,有一些纹理被创建为具有不同的尺寸(例如256×256甚至更小).我不明白当我只有一个1024×1024 png作为输入时会发生什么.

发生了什么?我该怎么调试呢?

更新:

Bongeh的回答帮助我解决了这个问题 – 让我看了两遍.我的iOS模拟器中有一些旧版本的PNG文件被加载,即使它们不在Xcode项目中也是如此.从Xcode执行“清理”甚至“清理构建文件夹”不起作用,但使用iOS模拟器中的“重置内容和设置”命令就可以了.万岁!

解决方法 如果游戏中有超过1个Spritesheet,请确保它们不共享和帧名,另一种解决方法是手动指定纹理ID.

将以上代码替换为:

CCSprite* sprite = [CCSprite spriteWithSpriteFramename:@"something.png"];CCSpriteBatchNode* bar = [CCSpriteBatchNode batchNodeWithfile:@"atlas1.png"];[sprite setTexture:[bar texture]];[bar addChild: sprite]; // assert error here

我发现的唯一另一件事是,如果你的游戏在应用程序委托中收到内存警告,纹理缓存会被清除,你可以将其注释掉,但只要注意清除缓存即可.

总结

以上是内存溢出为你收集整理的cocos2d-iphone – Cocos2d的CCSpriteBatchNode抱怨不同的纹理ID全部内容,希望文章能够帮你解决cocos2d-iphone – Cocos2d的CCSpriteBatchNode抱怨不同的纹理ID所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/web/1000026.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-21
下一篇 2022-05-21

发表评论

登录后才能评论

评论列表(0条)

保存