我有一个“球”精灵,当某个场景发生时,它会改变它的纹理。我像这样改变它的纹理:
[ball setTexture:[[CCTextureCache sharedTextureCache] addImage:@"red.png"]];这确实起作用了;它更改了球子画面以使用red.png图像。如果我有大约20个球需要切换到使用这个精灵,我该如何处理呢?我会遍历每一个球和"addImage“吗?
如果可以,我希望加载纹理一次,将其保存在一个变量(称为"redTexture")中,然后能够将其分配给任何球对象。
任何关于如何实现这一点的建议都将是一个巨大的帮助,谢谢!
发布于 2011-07-03 05:27:03
如果您将该语句放在for循环中,您将一次又一次地将red.png图像添加到共享纹理缓存中,我怀疑这是您想要的。
让我们备份并重写一些东西,首先将red.png图像添加到共享纹理缓存中,单独一行:
[[CCTextureCache sharedTextureCache] addImage:@"red.png"];随后,只需调用CCTextureCache sharedTextureCache,即可再次获得相同的纹理。直到您将另一个图像添加到共享纹理缓存。
CCTextureCache是一个单例,它的文档并没有建议有一种方法来复制共享纹理缓存(这将是保存您的redTexture的理想方式)。在这种情况下,只需创建一个变量并将其指向CCTextureCache sharedTextureCache即可;不过要注意,在处理完它之前不要向其中添加任何其他图像:
CCTextureCache *redTexture = [CCTextureCache sharedTextureCache];现在让我们假设您已经有一个名为ballArray的数组(或可变数组),它包含20个球对象。您可以像这样循环遍历它们:
for (YourBallObject *ball in ballArray)
{
[ball setTexture:redTexture];
}或者更好的是,你可以这样做:
[ballArray makeObjectsPerformSelector:@selector(setTexture:) withObject:redTexture];祝你事事顺利。
https://stackoverflow.com/questions/6558770
复制相似问题