游戏背景模糊层

本文介绍了如何使用cocos2d-x的RenderTexture类动态创建纹理,并结合CCRenderTexture的begin和end方法,实现在游戏场景或特定节点上添加模糊层的效果。通过创建并应用LayerBlur,实现背景或指定节点的模糊视觉效果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >



RenderTexture动态创建纹理

CCRenderTexture,它允许你来动态创建纹理,并且可以在游戏中重用这些纹理。

  使用 CCRenderTexture非常简单 – 你只需要做以下5步就行了:

  1. 创建一个新的CCRenderTexture. 这里,你可以指定将要创建的纹理的宽度和高度。.
  2. 调用 CCRenderTexture:begin. 这个方法会启动OpenGL,并且接下来,任何绘图的命令都会渲染到CCRenderTexture里面去,而不是画到屏幕上。
  3. 绘制纹理. 你可以使用原始的OpenGL调用来绘图,或者你也可以使用cocos2d对象里面已经定义好的visit方法。(这个visit方法就会调用一些opengl命令来绘制cocos2d对象)
  4. 调用 CCRenderTexture:end. 这个方法会渲染纹理,并且会关闭渲染至CCRenderTexture的通道。
  5. 从生成的纹理中创建一个sprite. 你现在可以用CCRenderTexture的sprite.texture属性来轻松创建新的精灵了。



void LayerBoard::addBlur()
{

 Size size = Director::getInstance()->getWinSize();
 RenderTexture *rendertexture = RenderTexture::create(size.width, size.height, Texture2D::PixelFormat::RGBA8888, GL_DEPTH24_STENCIL8);
 rendertexture->beginWithClear(0.0f, 0.0f, 0.0f, 0.0f);
 Director::getInstance()->getRunningScene()->visit(); --在正在运行的场景上添加模糊背景
 rendertexture->end();

 LayerBlur * blur = LayerBlur::create(rendertexture->getSprite()->getTexture(), Rect(0, 0, rendertexture->getSprite()->getContentSize().width, rendertexture->getSprite()->getContentSize().height));
 blur->setPosition(Vec2(rendertexture->getSprite()->getContentSize().width / 2, rendertexture->getSprite()->getContentSize().height / 2));
 blur->setFlippedX(true);
 blur->setRotation(180);
 Director::getInstance()->getRunningScene()->addChild(blur);
 blurSprite = blur;
 blurSprite->retain();
 LayerColor * color = LayerColor::create(Color4B(0, 0, 0, 100), blur->getContentSize().width, blur->getContentSize().height);
 blurSprite->addChild(color);
}

void LayerBoard::removeBlur()
{
 if (blurSprite!=0)
 {
  blurSprite->removeAllChildren();
  blurSprite->removeFromParentAndCleanup(true);
  blurSprite = 0;
 }
}




void LayerBoard::addBlur(Node * node) --在node上添加模糊层效果
{
 if (node == 0)
 {
  Log("LayerBoard::addBlur .panrent node is invalid");
  return;
 }
 Size size = Director::getInstance()->getWinSize();
 RenderTexture *rendertexture = RenderTexture::create(size.width, size.height, Texture2D::PixelFormat::RGBA8888, GL_DEPTH24_STENCIL8);
 rendertexture->beginWithClear(0.0f, 0.0f, 0.0f, 0.0f);
 Director::getInstance()->getRunningScene()->visit();
 rendertexture->end();

 LayerBlur * blur = LayerBlur::create(rendertexture->getSprite()->getTexture(), Rect(0, 0, rendertexture->getSprite()->getContentSize().width, rendertexture->getSprite()->getContentSize().height));
 blur->setPosition(Vec2(rendertexture->getSprite()->getContentSize().width / 2, rendertexture->getSprite()->getContentSize().height / 2));
 blur->setFlippedX(true);
 blur->setRotation(180);
 node->addChild(blur);
 LayerColor * color = LayerColor::create(Color4B(0, 0, 0, 100), blur->getContentSize().width, blur->getContentSize().height);
 blur->addChild(color);
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值