时间: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
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);
网络发达,学会利用,培训坑钱。