更改CCRenderTexture创建的CCSprite的textureRect

时间:2013-04-16 15:39:05

标签: cocos2d-iphone

我有一个CCSprite逐渐需要从一端线性耗尽,从左到右说。为此,我试图更改精灵的textureRect属性,以便从一端疲惫不堪的部分是“外面的'精灵的显示框架。

我之前使用从spritesheet加载的精灵做了这样的事情。它运行得很完美。但是我使用CCSprite创建了这个CCRenderTexture并更改了textureRect属性,整个精灵都消失了。

第一个图像是我从CCRenderTexture获得的原始CCSprite。第二个图像显示了我想要实现的内容.Scrite的黑色虚线矩形部分需要省略。只有精灵的蓝色虚线部分需要显示。实际上,这个蓝色虚线矩形是我的textureRect。

changing textureRect property to show only portion of the whole sprite

有什么方法可以让我的精灵从一端减少。 正常创建的精灵与使用CCRenderTexture创建的精灵之间也有任何区别。

2 个答案:

答案 0 :(得分:0)

在使用一些低级别的黑客攻击之前,我做过类似的事情。

如果你使用CCProgressTimer,有一个解决方案,这很容易,我认为它应该足够你的例子。

但是你在评论中说你有一些special要求,比如“立即从两端消耗掉”,那么就需要一些低级别的黑客攻击。我最后一个目标的解决方案是:

1)获取纹理图像的原始数据。在cocos2d中,您可以使用CCRenderTexture,在cocos2d-x中,您可以使用CCImage

2)CCRenderTexture的方法为- (BOOL) saveToFile: (NSString *) name format: (tCCImageFormat) format 。您可以阅读其源代码,然后尝试将其保存为2D数组,而不是byte raw[1024][768]。此数组中的每个元素代表图片上的一个像素(类型可能不是byte,我不确定,几乎忘记了细节)。格式必须是PNG,因为需要透明度。

3)直接修改原始数据,将像素的透明度设置为你希望它消失的0x0。

4)使用您修改过的图片数据重新初始化CCRenderTexture

我不能直接提供代码,因为它是我的一个项目的商业秘密和核心部分。但我可以分享你的解决方案。您还需要了解PNG文件的工作原理。读:

https://en.wikipedia.org/wiki/Portable_Network_Graphics#File_header

答案 1 :(得分:0)

原来我犯了一个愚蠢的错误。在为textureRect(CGRect)提供值时,我实际上是将textureRect.origin.y设置为纹理的高度,这使得textureRect超出(上方)纹理区域这解释了为什么他们正在消失。