繁体   English   中英

更改CCRenderTexture创建的CCSprite的textureRect

[英]changing textureRect of a CCSprite created by CCRenderTexture

我有一个CCSprite逐渐需要从一端线性耗尽,让我们说从左到右。为此,我试图改变精灵的textureRect属性,以便从一端耗尽的部分是'外'精灵的显示框。

我做这样的事情与被从spritesheet.And它的工作perfectly.But我创造了这个加载一个精灵之前CCSprite使用CCRenderTexture通过改变textureRect财产,整个精灵被消失。

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

更改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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM