我需要一些關於cocos2d DrawNodes混合的幫助。我有DrawNode與精靈上它:如何混合cocos2d中的兩個DrawNode
和繪製多邊形(多邊形面積小於心臟精靈)的另一個DrawNode。作爲混合的結果,我需要有一個唯一的多邊形內部的心臟精靈的一部分,就像這樣: 我的代碼: TextureNode.h
class CTextureNode : public cocos2d::DrawNode
{
public:
static CTextureNode * create(const std::string & fileName, const cocos2d::Rect & rect);
CTextureNode();
virtual ~CTextureNode();
void setPolygonalMask(const cocos2d::Vec2 * verts, int count);
private:
bool initTexture(const std::string & fileName, const cocos2d::Rect & rect);
private:
cocos2d::DrawNode * m_pMask;
cocos2d::Sprite * m_pSprite;
float timeOutline;
bool bShaderInc;
};
TextureNode.cpp
CTextureNode * CTextureNode::create(const std::string & fileName, const cocos2d::Rect & rect)
{
auto ret = new CTextureNode();
if (!ret || !ret->init() || !ret->initTexture(fileName, rect))
{
CC_SAFE_DELETE(ret);
}
return ret;
}
CTextureNode::CTextureNode()
: timeOutline(0.f)
, bShaderInc(true)
, m_pMask(nullptr)
, m_pSprite(nullptr)
{
}
CTextureNode::~CTextureNode()
{
}
bool CTextureNode::initTexture(const std::string & fileName, const cocos2d::Rect & rect)
{
m_pSprite = cocos2d::Sprite::create(fileName, rect);
m_pSprite->setAnchorPoint(cocos2d::Point::ZERO);
addChild(m_pSprite);
m_pMask = cocos2d::DrawNode::create();
m_pMask->setPosition(cocos2d::Point::ZERO);
m_pMask->setAnchorPoint(cocos2d::Point::ZERO);
addChild(m_pMask);
return true;
}
void CTextureNode::setPolygonalMask(const cocos2d::Vec2 * verts, int count)
{
if (m_pMask)
{
m_pMask->drawPolygon(verts, count, cocos2d::Color4F::WHITE, 1, cocos2d::Color4F::WHITE);
cocos2d::BlendFunc maskBlendFunc = { GL_ONE_MINUS_SRC_ALPHA, GL_SRC_ALPHA };
m_pMask->setBlendFunc(maskBlendFunc);
auto size = m_pSprite->getContentSize();
auto renderer = cocos2d::RenderTexture::create(size.width, size.height, cocos2d::Texture2D::PixelFormat::RGBA8888);
renderer->begin();
m_pMask->visit();
renderer->end();
}
}
作爲此代碼的結果我看到完整的哈特精靈沒有多邊形。我也嘗試改變BlendFunc的值,但它沒有幫助。 請告訴我我在做什麼)
P.S.謝謝! P.S.P.S.對不起,我的英語)
我不明白你想要做什麼。你想掩蓋多邊形的精靈?張貼一些預覽它應該是什麼樣子。 – Makalele
@Makalele我有節點與精靈(灰心)在它和另一個節點繪製多邊形。第二個節點的大小小於第一個節點的大小。我需要混合這個節點。混合結果 - 第二個節點的多邊形與第一個節點內的精靈(第二個圖片是紅色多邊形內的區域)。 – otashlanov