cocos2dx绘制填充矩形
2015年01月24日 09:52
0 点赞
0 评论
更新于 2025-11-21 15:18
在 Cocos2d-x 中,我们可以通过代码直接实现填充矩形的绘制。下面将详细介绍如何完成这一操作。
绘制填充矩形的代码实现
我们需要重写 draw 函数来实现绘制填充矩形的功能。以下是具体的代码示例:
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);
// 设置填充颜色为红色(RGBA:255, 0, 0, 255)
glColor4ub(255, 0, 0, 255);
// 指定顶点数据
glVertexPointer(2, GL_FLOAT, 0, vertices);
// 绘制填充矩形,使用 GL_TRIANGLE_FAN 模式
glDrawArrays(GL_TRIANGLE_FAN, 0, 4);
// 设置边框颜色为蓝色(RGBA:0, 0, 255, 255)
glColor4ub(0, 0, 255, 255);
// 再次指定顶点数据
glVertexPointer(2, GL_FLOAT, 0, vertices);
// 绘制矩形边框,使用 GL_LINE_LOOP 模式
glDrawArrays(GL_LINE_LOOP, 0, 4);
// 恢复默认状态
glEnableClientState(GL_COLOR_ARRAY);
glEnableClientState(GL_TEXTURE_COORD_ARRAY);
glEnable(GL_TEXTURE_2D);
}
代码解释
- 父类
draw函数调用:CCLayer::draw();调用父类的draw函数,确保父类的绘制逻辑正常执行。 - 线条抗锯齿和宽度设置:
glEnable(GL_LINE_SMOOTH);启用线条抗锯齿,使线条更加平滑。glLineWidth(1);设置线条宽度为 1。
- 顶点定义:
CCPoint vertices[] = { ccp(100, 100), ccp(200, 100), ccp(200, 200), ccp(100, 200) };定义了矩形的四个顶点。 - 纹理和颜色数组禁用:
glDisable(GL_TEXTURE_2D);禁用 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);使用GL_TRIANGLE_FAN模式绘制填充矩形。
- 矩形边框绘制:
glColor4ub(0, 0, 255, 255);设置边框颜色为蓝色。glVertexPointer(2, GL_FLOAT, 0, vertices);再次指定顶点数据。glDrawArrays(GL_LINE_LOOP, 0, 4);使用GL_LINE_LOOP模式绘制矩形边框。
- 状态恢复:
glEnableClientState(GL_COLOR_ARRAY);启用颜色数组。glEnableClientState(GL_TEXTURE_COORD_ARRAY);启用纹理坐标数组。glEnable(GL_TEXTURE_2D);启用 2D 纹理,恢复默认状态。
通过重写上述 draw 函数,就可以在 Cocos2d-x 中实现填充矩形的绘制。