我正在使用我在某处找到的遮罩功能(对不起,我想表扬,但不记得在哪里)。这很简单,但是当我使用它时,我偶尔(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 上运行。