i’m using CCMask and having a problem that if i do not use a background image then it makes the empty parts black. any help???
Here is my code:
CCSprite *masks = CCSprite::create("maskimage.png");
Utils::makeMultiResolution(masks);
masks->setPosition(ccd(30.f, 750.f));
masks->setZOrder(2);
CCSprite * mask = CCSprite::create(maskName);
Utils::makeMultiResolution(mask);
mask->setPosition(ccd(314, 275));
CCSprite *object = mask;
// BACKGROUND image is added in "this" (this->addChild(bg);)
CCMask * myMask = CCMask::createMaskForObject(gameLayer, masks);
this->addChild(myMask, 2);
myMask->mask();
//mask a new object
myMask->setObject(mask);
myMask->setMask(masks);
myMask->maskWithoutClear();
My CCMask Class code which i modified
//
// CCMask.cpp
//
// Created by Ashar on 5/20/13.
//
//
#include "CCMask.h"
#include "Utils.h"
using namespace cocos2d;
CCScene * CCMask::scene()
{
CCScene * scene = CCScene::create();
CCMask * cmask = CCMask::create();
scene->addChild(cmask);
return scene;
}
CCMask* CCMask::createMaskForObject(cocos2d::CCNode* object, cocos2d::CCSprite* mask)
{
CCMask * mak = (CCMask*)CCMask::create();
return mak->initWithObject(object, mask);
}
CCMask* CCMask::initWithObject(cocos2d::CCNode* object, cocos2d::CCSprite* mask)
{
if(!cocos2d::CCNode::init())
{
return false;
}
objectSprite_ = object;
size = cocos2d::CCDirector::sharedDirector()->getWinSize();
maskSprite_ = mask;
// Set up the burn sprite that will "knock out" parts of the darkness layer depending on the alpha value of the pixels in the image.
maskSprite_->setBlendFunc((ccBlendFunc) { GL_ZERO, GL_ONE_MINUS_SRC_ALPHA });
// Create point with middle of screen
cocos2d::CCPoint screenMid = ccp(size.width * 0.5f, size.height * 0.5f);
// Create the rendureTextures for the mask
masked = CCRenderTexture::create(size.width, size.height);
// masked->getSprite()->setBlendFunc((ccBlendFunc) { GL_ONE_MINUS_SRC_ALPHA, GL_SRC_ALPHA });
masked->getSprite()->setBlendFunc((ccBlendFunc) { GL_ONE_MINUS_SRC_ALPHA, GL_SRC_ALPHA });
// Set render textures at middle of screen
masked->setPosition(screenMid);
// Add the masked object to the screen
// [self addChild: masked_];
this->addChild(masked);
// masked->beginWithClear(0.0f, 0.0f, 0.0f, 1.0f);
//
// masked->end();
return this;
}
void CCMask::mask()
{
this->maskWithClear(0.0f, 0.0f, 0.0f, 0.0f);
}
void CCMask::maskWithClear(float r, float g, float b, float a)
{
masked->beginWithClear(r, g, b, a);
// Limit drawing to the alpha channel
objectSprite_->visit();
glColorMask(0.0f, 0.0f, 0.0f, 1.0f);
// Draw mask
maskSprite_->visit();
// Reset color mask
glColorMask(1.0f, 1.0f, 1.0f, 1.0f);
masked->end();
}
void CCMask::maskWithoutClear()
{
masked->begin();
objectSprite_->visit();
// Limit drawing to the alpha channel
glColorMask(0.0f, 0.0f, 0.0f, 1.0f);
// Draw mask
maskSprite_->visit();
// Reset color mask
glColorMask(1.0f, 1.0f, 1.0f, 1.0f);
masked->end();
}
void CCMask::reDrawMask()
{
//presume object is already drawed in a previous frame
// CCSprite * spr = (CCSprite*)maskSprite_;
//
// printf("%f", spr->boundingBox().size.width);
//
//
// if(spr->getColor().r == 0 && spr->getColor().b == 0 && spr->getColor().g == 0)
// {
// CCLog("YES");
// }
//
// ccBlendFunc blend = (ccBlendFunc){ GL_ZERO, GL_ONE_MINUS_SRC_ALPHA };
//
// if(spr->getBlendFunc().dst == blend.dst)
// {
// CCLog("YES");
// }
masked->begin();
// Limit drawing to the alpha channel
glColorMask(0.0f, 0.0f, 0.0f, 1.0f);
// Draw mask
maskSprite_->visit();
// Reset color mask
glColorMask(1.0f, 1.0f, 1.0f, 1.0f);
// glColorMask(0.5f, 0.5f, 0.5f, 0.5f);
masked->end();
}
void CCMask::setObject(CCNode* object)
{
// objectSprite_->release();
objectSprite_ = NULL;
objectSprite_ = object;
objectSprite_->retain();
}
void CCMask::setMask(CCSprite* mask)
{
// maskSprite_->release();
maskSprite_ = NULL;
maskSprite_ = mask;
maskSprite_->setBlendFunc((ccBlendFunc) { GL_ZERO, GL_ONE_MINUS_SRC_ALPHA });
maskSprite_->retain();
// maskSprite_->setOpacity(125);
}
cocos2d::CCSprite* CCMask::maskSprite()
{
return maskSprite_;
}
CCMask::CCMask()
{
}
CCMask::~CCMask()
{
removeAllChildrenWithCleanup(true);
// CC_SAFE_RELEASE(mas);
CC_SAFE_RELEASE(maskSprite_);
CC_SAFE_RELEASE(objectSprite_);
}
Help me please
iOS Simulator Screen shot 14-Dec-2013 5.57.08 PM.png (162.2 KB)