3

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

我之前使用从 spritesheet 加载的 sprite 做过这种事情。它工作得很好。但是我CCSprite使用CCRenderTexture并通过更改textureRect属性创建了这个,整个 sprite 消失了。

第一张图片是我从 CCRenderTexture 获得的原始 CCSprite。第二张图片显示了我想要实现的效果。Sprite 的黑色虚线矩形部分需要省略。只需要显示精灵的蓝色虚线部分。本质上,这个蓝色虚线矩形是我的纹理矩形。

更改 textureRect 属性以仅显示整个精灵的一部分

有什么办法可以让我的精灵从一端减少。正常创建的精灵和使用CCRenderTexture.

4

2 回答 2

0

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

于 2013-04-17T07:18:46.530 回答
0

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

如果您使用,有一个解决方案CCProgressTimer,这很容易,我认为对于您的示例应该足够了。

但是您在评论中说您有一些special要求,例如“同时从两端耗尽它”,那么需要一些低级的黑客攻击。我最后一个对象的解决方案是:

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

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

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

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

我无法直接提供代码,因为这是我的一个项目的商业机密和核心部分。但我可以和你分享我的解决方案。您还需要一些有关 PNG 文件如何工作的知识。读:

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

于 2013-04-17T04:55:38.557 回答