绘制完美圆形——角色、子弹、按钮等游戏元素的基石。
| 函数 | 说明 |
|---|---|
void xgeShapeCircleFill(float fX, float fY, float fRadius, uint32_t iColor) | 填充圆 |
void xgeShapeCircleFillPx(float fX, float fY, float fRadius, uint32_t iColor) | 填充圆(像素坐标) |
void xgeShapeCircleStroke(float fX, float fY, float fRadius, float fWidth, uint32_t iColor) | 描边圆 |
void xgeShapeCircleStrokePx(float fX, float fY, float fRadius, float fWidth, uint32_t iColor) | 描边圆(像素坐标) |
gcc -O2 -I. -o ch23.exe ch23_main.c build\xge.lib -lm -lws2_32 -liphlpapi -lgdi32 -luser32 -lshell32 -lopengl32 -lole32 -lwinmm -lavrt
.\ch23.exe
// 实心圆:中心 (400,300),半径 80
xgeShapeCircleFill(400, 300, 80.0f, 0x4FD8C2FF);
// 空心圆环:半径 120,线宽 4
xgeShapeCircleStroke(400, 300, 120.0f, 4.0f, 0xFFB454FF);
// 同心圆靶心
for (int i = 5; i >= 1; i--) {
uint32_t c = (i % 2) ? 0xFF6B5EFF : 0xFFFFFFFF;
xgeShapeCircleFill(400, 300, i * 25.0f, c);
}double t = xgeTimer();
float r = 60.0f + 20.0f * (float)sin(t * 2.0);
xgeShapeCircleFill(400, 300, r, 0x6DB3F2FF);// 绘制所有碰撞体(调试用)
for (int i = 0; i < g_iEntityCount; i++) {
float x = g_tEntities[i].fX;
float y = g_tEntities[i].fY;
float r = g_tEntities[i].fRadius;
xgeShapeCircleStroke(x, y, r, 1.0f, 0x00FF0060);
}将以下代码保存为 ch23_main.c,编译后运行即可看到圆形的填充与描边效果:
#include "xge.h"
static int onFrame(void* pUser) {
(void)pUser;
xgeClear(0x081114FF);
// 填充圆形
xgeShapeCircleFill(200, 200, 80, 0x4FD8C2FF);
// 描边圆形
xgeShapeCircleFill(500, 200, 80, 3.0f, 0xFFB454FF);
// 多个大小递减的同心圆
for (int i = 5; i >= 1; i--) {
uint32_t c = (i % 2) ? 0xFF6B5E60 : 0x6DB3F260;
xgeShapeCircleFill(400, 430, i * 25.0f, c);
}
return XGE_OK;
}
int main(void) {
xge_desc_t d = {0};
d.iWidth = 800;
d.iHeight = 600;
d.sTitle = "ch23 - Circles";
d.iFlags = XGE_INIT_VSYNC;
xgeInit(&d);
xgeRun(onFrame, NULL);
xgeUnit();
return 0;
}xgeShapeCircleFill(cx, cy, r, color) 绘制实心圆,(cx,cy) 为圆心。xgeShapeCircleFill(cx, cy, r, width, color) 绘制圆形描边。60 = 约 37%)使重叠区域可见。