cocos2dx阴影层的实现
2024-09-21 09:21:51
效果图
//ShadowLayer.h
class ShadowLayer : public CCLayer
{
protected:
ShadowLayer()
:m_pRender(NULL)
,m_pShadow(NULL)
{}
~ShadowLayer()
{
CC_SAFE_RELEASE(m_pRender);
CC_SAFE_RELEASE(m_pShadow);
} public:
static ShadowLayer* create(CCNode* pRender,const CCPoint& ptOffset=ccp(-5.0f,-5.0f),const ccColor4F& col = ccc4f(,,,0.5f) ); virtual bool init();
virtual void update(float delta)override;
virtual void setOffset(const CCPoint& ptOffset);
virtual void setShadowColor(const ccColor4F& col);
CC_SYNTHESIZE_RETAIN(CCNode*,m_pRender,Render); private:
CCRenderTexture* m_pRT;
CCRenderTexture* m_pShadow;
};
//ShadowLayer.h
ShadowLayer* ShadowLayer::create(CCNode* pRender,const CCPoint& ptOffset/*t=ccp(-5.0f,-5.0f)*/,const ccColor4F& col/* = ccc4f(0,0,0,0.5f)*/ )
{
ShadowLayer *pRet = new ShadowLayer();
if (pRet && pRet->init())
{
pRet->autorelease();
pRet->setRender(pRender);
pRet->setShadowColor(col);
pRet->setOffset(ptOffset);
return pRet;
}
else
{
delete pRet;
pRet = NULL;
return NULL;
}
}
bool ShadowLayer::init()
{
if (CCLayer::init())
{
CCSize sz = getContentSize();
m_pRT = CCRenderTexture::create(sz.width,sz.height);
m_pRT->setPosition(sz.width/,sz.height/); addChild(m_pRT); m_pShadow = CCRenderTexture::create(sz.width,sz.height);
m_pShadow->setPosition(ccp(sz.width/,sz.height/)); ccBlendFunc tBlendFunc = {GL_DST_ALPHA, GL_NONE};
//ccBlendFunc tBlendFunc = {GL_ONE, GL_NONE};
m_pShadow->getSprite()->setBlendFunc(tBlendFunc);
m_pShadow->retain(); scheduleUpdate();
} return true;
} void ShadowLayer::update(float delta)
{
m_pRT->clear(,,,); m_pRT->begin(); if (m_pRender)
{
m_pRender->visit();
}
m_pShadow->visit(); m_pRT->end();
} void ShadowLayer::setShadowColor(const ccColor4F& col)
{
m_pShadow->beginWithClear(col.r,col.g,col.b,col.a);
m_pShadow->end();
} void ShadowLayer::setOffset( const CCPoint& ptOffset )
{
setPosition(ptOffset);
}
最新文章
- thinkphp2
- python 最小公倍数
- poi批量导入excel文件
- Ratatype - 在线打字教程,提高打字速度
- segement fault常见错误
- 使用JUnit4进行java单元测试
- Java通过socket实现smtp协议发送邮件
- 用BFS和DFS解决圆盘状态搜索问题
- PDO基础知识
- 详解VB.net编写DLL(动态链接库、应用程序扩展)文件
- hdu1828(线段树——矩形周长并)
- Android系统--输入系统(十四)Dispatcher线程情景分析_dispatch前处理
- 【Linux】 CentOS7 虚拟机配置
- POJ-2253 Frogger---最短路变形&;&;最大边的最小值
- Oracle 总账年终结算流程
- 呵呵,Python操作MSSQL的帮助类
- 数据库between and
- java web 登录后更新JSESSIONID
- 断断续续Python看到现在
- 新装的MySQL没有密码怎么办