cocos2dx 绘制矩形
本文将介绍在 Cocos2d-x 中绘制带有边框矩形的方法,并提供相应的源代码。
实现思路
要在 Cocos2d-x 中绘制矩形,我们需要重写 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[]:定义矩形的四个顶点,这里使用ccp函数创建CCPoint对象。glDisable(GL_TEXTURE_2D)等:禁用纹理和相关数组,确保绘制时不使用纹理信息。glColor4ub:设置绘制颜色,分别设置填充颜色为红色和边框颜色为蓝色。glVertexPointer:设置顶点指针,指定顶点数据的格式和位置。glDrawArrays:分别使用GL_TRIANGLE_FAN绘制填充矩形,使用GL_LINE_LOOP绘制矩形边框。- 恢复默认状态:最后,启用之前禁用的状态,确保后续绘制操作不受影响。
总结
通过重写 draw 函数,并使用 OpenGL 的相关函数,我们可以在 Cocos2d-x 中轻松绘制带有边框的矩形。只需要按照上述代码示例进行实现,即可完成矩形的绘制。