[英]changing textureRect of a CCSprite created by CCRenderTexture
我有一个CCSprite
逐渐需要从一端线性耗尽,让我们说从左到右。为此,我试图改变精灵的textureRect
属性,以便从一端耗尽的部分是'外'精灵的显示框。
我做这样的事情与被从spritesheet.And它的工作perfectly.But我创造了这个加载一个精灵之前CCSprite
使用CCRenderTexture
通过改变textureRect
财产,整个精灵被消失。
第一个图像是我从CCRenderTexture获得的原始CCSprite。第二个图像显示了我想要实现的内容。需要省略Sprite的黑色虚线矩形部分。只需要显示精灵的蓝色虚线部分。基本上,这个蓝色虚线矩形是我的textureRect。
有什么方法可以让我的精灵从一端减少。 正常创建的精灵和使用CCRenderTexture
创建的精灵之间也有任何区别。
在使用一些低级别的黑客之前,我做过类似的事情。
如果你使用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
事实证明我犯了一个愚蠢的错误。在为textureRect(CGRect)提供值时,我实际上将textureRect.origin.y设置为纹理的高度,这使得我的textureRect超出(在纹理区域之上)。这解释为什么他们正在消失
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.