Objective c 从sprite cocos2d中剪切自定义形状
我有一个形象和一个形状。我需要用我形状的alpha通道从图像中创建一个剪切,我的意思是: 我可以使用CCMask,但我对结果没有印象。 你能给我指一个替代方案吗?Objective c 从sprite cocos2d中剪切自定义形状,objective-c,cocos2d-iphone,alpha,shape,ccsprite,Objective C,Cocos2d Iphone,Alpha,Shape,Ccsprite,我有一个形象和一个形状。我需要用我形状的alpha通道从图像中创建一个剪切,我的意思是: 我可以使用CCMask,但我对结果没有印象。 你能给我指一个替代方案吗? 非常感谢您的帮助 看看这些教程 CoCoS2D2.0: Cocos2d 1.0: -=(W)=- 我也有类似的问题。我阅读了教程并使用了CCMask。CCMask是一个很好的类,但有一个问题。当遮罩的大小大于纹理的大小时,我们可以看到遮罩的碎片,这是非常糟糕的。 用我的决定享受吧 -(CCSprite *)maskedSprite
非常感谢您的帮助 看看这些教程 CoCoS2D2.0: Cocos2d 1.0: -=(W)=- 我也有类似的问题。我阅读了教程并使用了CCMask。CCMask是一个很好的类,但有一个问题。当遮罩的大小大于纹理的大小时,我们可以看到遮罩的碎片,这是非常糟糕的。 用我的决定享受吧
-(CCSprite *)maskedSpriteWithSprite:(CCSprite *)textureSprite maskSprite:(CCSprite *)maskSprite
{
CCSprite *maskSprite_ = [CCSprite spriteWithTexture:[maskSprite texture]];
CCSprite *textureSprite_ = [CCSprite spriteWithTexture:[textureSprite texture]];
maskSprite_.position = maskSprite.position;
maskSprite_.rotation = maskSprite.rotation;
maskSprite_.opacity = maskSprite.opacity;
maskSprite_.scale = maskSprite.scale;
maskSprite_.zOrder = maskSprite.zOrder;
textureSprite_.position = textureSprite.position;
textureSprite_.rotation = textureSprite.rotation;
textureSprite_.opacity = textureSprite.opacity;
textureSprite_.scale = textureSprite.scale;
textureSprite_.zOrder = textureSprite.zOrder;
[maskSprite_ setColor:ccc3(0.0, 0.0, 0.0)];
//Start cutting sprite
CCRenderTexture *rt;
float dx;
float dy;
//Correct mask
rt = [CCRenderTexture renderTextureWithWidth:maskSprite_.contentSize.width*maskSprite_.scale height:maskSprite_.contentSize.height*maskSprite_.scale];
dx = textureSprite_.position.x - maskSprite_.position.x;
dy = textureSprite_.position.y - maskSprite_.position.y;
maskSprite_.position = ccp(maskSprite_.contentSize.width/2*maskSprite_.scale, maskSprite_.contentSize.height/2*maskSprite_.scale);
textureSprite_.position = ccp(maskSprite_.position.x+dx, maskSprite_.position.y+dy);
[textureSprite_ setBlendFunc:(ccBlendFunc){GL_ONE, GL_ZERO}];
[maskSprite_ setBlendFunc:(ccBlendFunc){GL_DST_ALPHA, GL_ZERO}];
[rt begin];
[textureSprite_ visit];
[maskSprite_ visit];
[rt end];
CCSprite *correctMaskSprite_ = [CCSprite spriteWithTexture:rt.sprite.texture];
correctMaskSprite_.flipY = YES;
correctMaskSprite_.position = maskSprite.position;
correctMaskSprite_.rotation = maskSprite.rotation;
correctMaskSprite_.opacity = maskSprite.opacity;
correctMaskSprite_.scale = maskSprite.scale;
correctMaskSprite_.zOrder = maskSprite.zOrder;
//New sprite with correct mask
[correctMaskSprite_ setBlendFunc:(ccBlendFunc){GL_ONE, GL_ZERO}];
[textureSprite_ setBlendFunc:(ccBlendFunc){GL_DST_ALPHA, GL_ZERO}];
[rt begin];
[correctMaskSprite_ visit];
[textureSprite_ visit];
[rt end];
CCSprite *retval = [CCSprite spriteWithTexture:rt.sprite.texture];
retval.flipY = YES;
return retval;
}