当前位置:Gxlcms > mysql > 【转】cocos2dx橡皮擦效果,CCRenderTexture的使用

【转】cocos2dx橡皮擦效果,CCRenderTexture的使用

时间:2021-07-01 10:21:17 帮助过:44人阅读

有关openGl方面,请参考http://cn.cocos2d-x.org/tutorial/show?id=1482 CCRenderTexture:http://www.cnblogs.com/andyque/archive/2011/07/01/2095479.html 根据这两篇博文,试了一下,发现一些注意点,记录下来: 1.经我尝试,感觉最好用的是DrawNode,可

有关openGl方面,请参考http://cn.cocos2d-x.org/tutorial/show?id=1482

CCRenderTexture:http://www.cnblogs.com/andyque/archive/2011/07/01/2095479.html


根据这两篇博文,试了一下,发现一些注意点,记录下来:

1.经我尝试,感觉最好用的是DrawNode,可以设置zOrder为负数,擦除时可以不让用户看见,也不会有锯齿。

直接写一个触摸的函数,一看便知:

bool HelloWorld::TouchBegan(Touch* touch, Event* event)
{

obj_Erase->clear();
auto location = touch->getLocation();


float fRadius = 30.0f;///< 圆的半径
const int nCount = 100;///< 用正100边型来模拟园
const float coef = 2.0f * (float)M_PI / nCount; ///< 计算每两个相邻顶点与中心的夹角
static CCPoint circle[nCount]; ///< 顶点数组
for (unsigned int i = 0; i float rads = i*coef; ///< 弧度
circle[i].x = fRadius * cosf(rads); ///< 对应顶点的x
circle[i].y = fRadius * sinf(rads); ///< 对应顶点的y
}
obj_Erase->drawPolygon(circle, nCount, ccc4f(0, 0, 0, 0), 0, ccc4f(0, 0, 0, 0));//绘制这个多边形!
BlendFunc blendFunc = { GL_ONE, GL_ZERO };
obj_Erase->setPosition(location.x - 320, location.y - 180);//调整位置,适应RenderTexture
obj_Erase->setBlendFunc(blendFunc);
myRt->begin();
obj_Erase->visit();
myRt->end();

}

obj_Erase就是一个DrawNode,全局变量。

obj_Erase = DrawNode::create();
this->addChild(obj_Erase,-1);

刚开始Clear一下DrawNode,这样不会使GL verts一路猛增。最后卡的一发不卡收拾。

画圆的方法是抄来的,多边形代替圆,点个赞!


关于DrawNode的zOrder最好设置负数,或者不会挡住其他精灵的位置。不然会看见如上的黑圈。



2.CCRenderTexture

CCRenderTexture的Begin,我们绘制的东西,visit之后的坐标会根据CCRenderTexture的坐标系重新计算,CCRenderTexture左下角为原点。


所以就有了位置的调整:

obj_Erase->setPosition(location.x - 320, location.y - 180);


网络发达,学会利用,培训坑钱。

人气教程排行