gpt4 book ai didi

cocos2d-iphone - Cocos2d 的 CCSpriteBatchNode 提示纹理 id 不同

转载 作者:行者123 更新时间:2023-12-04 23:29:31 25 4
gpt4 key购买 nike

我正在尝试使用 CCSpriteBatchNode 一次渲染多个 Sprite 来优化我的游戏。但是,由于某种原因,当我将 CCSpriteBatchNode 作为我的 Sprite 的父级时,cocos2d 给了我这个错误:

"CCSprite is not using the same texture id"

我对此感到困惑,因为我有一个包含所有图形的 1024x1024 纹理图集。它是用 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 纹理初始化/查找代码中,令人惊讶的是,创建了一些不同尺寸的纹理(例如 256x256 或更小)。我不明白当我只有一个 1024x1024 png 作为输入时会发生这种情况。

发生了什么?我该如何调试呢?

更新:

Bongeh 的回答帮助我解决了这个问题 - 让我对所有事情都看了两眼。在我的 iOS 模拟器中,有一些来自旧版本游戏的过时 PNG 文件正在加载,即使它们不再在 Xcode 项目中。从 Xcode 执行“清理”甚至“清理构建文件夹”不起作用,但使用 iOS 模拟器中的“重置内容和设置”命令可以解决问题。万岁!

最佳答案

如果您的游戏中有超过 1 个 spritesheet,请确保它们不共享和 framenames,另一种解决方法是手动指定纹理 ID。

将上面的代码替换为:

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

我发现的唯一另一件事是,如果您的游戏在应用程序委托(delegate)中收到内存警告,有时纹理缓存会被清除,您可以将其注释掉,但请注意尽可能清除缓存。

关于cocos2d-iphone - Cocos2d 的 CCSpriteBatchNode 提示纹理 id 不同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7243897/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com