0

我正在使用我在某处找到的遮罩功能(对不起,我想表扬,但不记得在哪里)。这很简单,但是当我使用它时,我偶尔(10%)会在应用程序的某个地方发生崩溃(EXC_BAD_ACCESS)。位置并不一致,但似乎总是与绘图有关。例如,一旦它发生在此函数的第一个“访问”行。更常见的是,它发生在 Cocos2d 显示链接中。

这是功能:

+ (CCSprite *)maskedSpriteWithSprite:(CCSprite *)textureSprite maskSprite:(CCSprite *)maskSprite {

  CCRenderTexture * rt = [CCRenderTexture renderTextureWithWidth:maskSprite.contentSize.width height:maskSprite.contentSize.height];
  maskSprite.position = ccp(maskSprite.contentSize.width/2, maskSprite.contentSize.height/2);
  textureSprite.position = ccp(textureSprite.contentSize.width/2, textureSprite.contentSize.height/2);

  [maskSprite setBlendFunc:(ccBlendFunc){GL_ONE, GL_ZERO}];
  [textureSprite setBlendFunc:(ccBlendFunc){GL_DST_ALPHA, GL_ZERO}];

  [rt begin];
  [maskSprite visit];
  [textureSprite visit];
  [rt end];

  CCSprite *retval = [CCSprite spriteWithTexture:rt.sprite.texture];
  retval.flipY = YES;
  return retval;
}

而我的实现:

CCSprite* mask = [CCSprite spriteWithFile:fp_mask];
CCSprite* fill = [CCSprite spriteWithFile:fp_bk];
CCNode* fullBar = [CCSprite maskedSpriteWithSprite:fill maskSprite:mask];
[self addChild:fullBar];

请注意,如果我注释掉函数的调用并简单地将“填充”对象添加为子对象,则一切正常。

另请注意,这是 Mac OSX,FWIW,尽管我的代码也可以在 iPhone 上运行。

4

0 回答 0