【问题标题】:changing textureRect of a CCSprite created by CCRenderTexture更改由 CCRenderTexture 创建的 CCSprite 的 textureRect
【发布时间】:2013-04-16 15:39:04
【问题描述】:

我有一个CCSprite,它逐渐需要从一端线性耗尽,比如说从左到右。为此,我正在尝试更改精灵的textureRect 属性,以便得到的部分从一端耗尽是“外部”精灵的显示框架。

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

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

有什么办法可以让我的精灵从一端缩小。 正常创建的精灵和使用CCRenderTexture 创建的精灵之间也有什么区别。

【问题讨论】:

  • 你能显示截图吗?仅用词不够清楚。
  • 刚刚做了一个编辑。看看
  • 我在使用一些低级黑客之前做过类似的事情。我无法直接提供代码,因为这是我的一个项目的商业机密和核心部分。但我可以分享一些解决方案。如果您使用CCProgressTimer,则有一个解决方案,这很容易,我认为这对您来说应该足够了。如果你有一些special 的要求,比如“我怎样才能删除精灵的一个圆圈部分”,那么就需要一些低级的技巧。我认为您应该向我们展示如何使用 CCRenderTexture 创建 CCSprite 的代码。
  • 如果我想同时从两端耗尽它怎么办?正面和背面,而我的精灵位置保持在两者之间?正如我之前所说,我用批处理的 CCSprite 做了这种技巧。我需要做的就是设置它的 textureRect 属性。但是这个 CCSprite 是通过 CCRenderTexture 实现的。我不知道如何将代码放入 cmets 但它非常基本。

标签: cocos2d-iphone


【解决方案1】:

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

如果您使用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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-10-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多