从BatchNode更新CCTexture2D

时间:2014-04-06 17:08:56

标签: cocos2d-iphone ccsprite ccspritebatchnode cctexturecache

完成测试后,我将图像移动到spritesheet上。

我用适当的文件加载了batchnode,我的图片加载得很好。

但我遇到了交换纹理的问题。当图像是单个文件时,没有问题。现在看来CCTexture2d不喜欢我的精灵表。

我将对象存储在一个多维数组中,因此我可以快速浏览它们并更新它们的图像。


以下是我工作时所做的事情:

CCTexture2D* tex = [[CCTextureCache sharedTextureCache] addImage:@"alt-image.png"];
[((MyFunObject*)[[myFunObject2DArr objectAtIndex:j]objectAtIndex:i])->img setTexture: tex];

以下是我现在正在做的事情:

CCTexture2D* tex = [[CCTextureCache sharedTextureCache] addImage:[CCSprite spriteWithSpriteFrameName:@"alt-image.png"]];
[((MyFunObject*)[[myFunObject2DArr objectAtIndex:j]objectAtIndex:i])->img setTexture: tex];

MyFunObject CCSprite的子类,并且设置了CCSprite img属性。我浏览数组并找到类似的对象并用新图像“alt-image.png”替换它们的图像。

看起来很简单,但在精灵表之外,这完美无缺。

有人能告诉我我做错了吗?


1 个答案:

答案 0 :(得分:0)

<强>更新: 这是解决这个问题的未来任何人的解决方案

你不能改变精灵&#39;纹理&#39;当有问题的纹理是spritesheet。 (在那一个上低头) 您只能更改已查看的矩形。

以下是您的操作方法:

[((MyFunObject*)[[myFunObject2DArr objectAtIndex:j]objectAtIndex:i])->img setTextureRect:[[CCSpriteFrameCache sharedSpriteFrameCache] spriteFrameByName: @"alt-image.png" ].rect];

注意我已将setTexture更改为setTextureRect,然后将SpriteFrame的矩形称为参数。

享受。