cocos2dx 怎么画矩形
在 cocos2dx 中,要画一个矩形,下面将为你详细介绍实现方法及代码。
实现思路
我们需要重写 draw 函数,在该函数中进行 OpenGL 的相关操作来绘制矩形。具体步骤包括设置线条平滑、定义矩形顶点、禁用纹理和颜色数组、设置颜色、绘制填充矩形和矩形边框,最后恢复默认状态。
示例代码
void GameLayer1::draw(void)
{
// 调用父类的 draw 函数
CCLayer::draw();
// 启用线条平滑
glEnable(GL_LINE_SMOOTH);
// 设置线条宽度为 1
glLineWidth(1);
// 定义矩形的四个顶点
CCPoint vertices[] = { ccp(100, 100), ccp(200, 100), ccp(200, 200), ccp(100, 200) };
// 禁用 2D 纹理
glDisable(GL_TEXTURE_2D);
// 禁用纹理坐标数组
glDisableClientState(GL_TEXTURE_COORD_ARRAY);
// 禁用颜色数组
glDisableClientState(GL_COLOR_ARRAY);
// 设置填充矩形的颜色为红色
glColor4ub(255, 0, 0, 255);
// 设置顶点指针
glVertexPointer(2, GL_FLOAT, 0, vertices);
// 绘制填充矩形
glDrawArrays(GL_TRIANGLE_FAN, 0, 4);
// 设置矩形边框的颜色为蓝色
glColor4ub(0, 0, 255, 255);
// 再次设置顶点指针
glVertexPointer(2, GL_FLOAT, 0, vertices);
// 绘制矩形边框
glDrawArrays(GL_LINE_LOOP, 0, 4);
// 恢复默认状态
glEnableClientState(GL_COLOR_ARRAY);
glEnableClientState(GL_TEXTURE_COORD_ARRAY);
glEnable(GL_TEXTURE_2D);
}
代码解释
CCLayer::draw():调用父类的draw函数,确保父类的绘制逻辑正常执行。glEnable(GL_LINE_SMOOTH)和glLineWidth(1):启用线条平滑效果,并设置线条宽度为 1。CCPoint vertices[]:定义矩形的四个顶点坐标。glDisable系列函数:禁用 2D 纹理、纹理坐标数组和颜色数组,以便进行纯图形绘制。glColor4ub:设置绘制图形的颜色,这里分别设置填充矩形为红色,边框为蓝色。glVertexPointer:设置顶点指针,指定顶点数据的格式和位置。glDrawArrays:根据指定的绘制模式(GL_TRIANGLE_FAN用于绘制填充矩形,GL_LINE_LOOP用于绘制矩形边框)和顶点数据进行绘制。- 恢复默认状态:使用
glEnable和glEnableClientState函数恢复纹理和颜色数组的使用。
总结
通过重写 draw 函数并按照上述步骤进行 OpenGL 操作,就可以在 cocos2dx 中成功绘制矩形。你可以根据需要调整顶点坐标和颜色,实现不同位置和颜色的矩形绘制。