我有一个CCSprite
逐渐需要从一端线性耗尽,从左到右说。为此,我试图更改精灵的textureRect
属性,以便从一端疲惫不堪的部分是“外面的'精灵的显示框架。
我之前使用从spritesheet加载的精灵做了这样的事情。它运行得很完美。但是我使用CCSprite
创建了这个CCRenderTexture
并更改了textureRect
属性,整个精灵都消失了。
第一个图像是我从CCRenderTexture获得的原始CCSprite。第二个图像显示了我想要实现的内容.Scrite的黑色虚线矩形部分需要省略。只有精灵的蓝色虚线部分需要显示。实际上,这个蓝色虚线矩形是我的textureRect。
有什么方法可以让我的精灵从一端减少。
正常创建的精灵与使用CCRenderTexture
创建的精灵之间也有任何区别。
答案 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超出(上方)纹理区域这解释了为什么他们正在消失。