EGE专栏:EGE专栏
接下来的内容,建议先将 (三)EGE基础教程上篇 中官网的新手入门教程中的程序每个都看一遍,并编译运行后再来看下面的教程,因为下面内容讲得比较详细,是分内容来讲,不适合刚入门时的节奏。刚入门就应该先大致地了解一下EGE图形库的使用。
点击这里:
新手入门 https://xege.org/beginner-lesson-2.html
以下来自 ege.h
FileName: ege.h
#if defined(_INC_CONIO) || defined(_CONIO_H_)
#error can not include "conio.h" before "graphics.h"
#endif
#ifndef __cplusplus
#error You must use C++ compiler, or you need filename with '.cpp' suffix
#endif
#define SHOW_CONSOLE
CodeBlocks 和Devc++是默认显示控制台的,CodeBlocks想要关闭控制台需要在项目属性那里将项目类型设置为GUI程序, 而不是控制台程序。
调用 Sleep() 这个API时,或者调用 delay(),实际均会转化为调用 delay_ms(),如必需调用API请使用 api_sleep()
delay_ms() 能自行判断有没有更新的必要,连续多次但不大量的调用并不会产生帧率的影响
调用 delay_ms() , delay_fps(), getch() , getkey() , getmouse() 时,窗口内容可能会更新,这些函数相当于内置了delay_ms(0),
如果你只需要更新窗口,而不想等待,可以用 delay_ms(0) 。注意 delay 只延时而不更新窗口
合理地使用 delay_ms() /delay_fps() 函数,可以减少你的程序占用的CPU,否则一个都没有调用同时也没有 getch/getmouse 的话,程序将占满一个CPU的时间
#ifndef __cplusplus
#error You must use C++ compiler, or you need filename with '.cpp' suffix
#endif
使用的是VS2017, 新建工程后,将下面的代码复制粘贴到C++源文件中
#include
int main()
{
initgraph(640, 480); //初始化窗口,大小为640 x 480
setcolor(EGERGB(0xFF, 0x0, 0x0)); //设置绘画颜色为红色
setbkcolor(WHITE); //设置背景颜色为白色
circle(320, 240, 100); //在坐标(320, 240)处画个半径100的圆
getch(); //暂停,等待按键输入
closegraph(); //关闭图形窗口,
return 0;
}
分析一下程序
#include
这个头文件我们在前面配置时就已经把它放在了VS2017 的 include 目录里了,所以用<>将其包含就行了,也可以使用 #include “graphics.h”,但是因为这个头文件并不是放在我们的项目文件中,还是用 #include
比较好。
扩展:
graphics.h 的内容只有下面几句,可以看到,包含了 ege.h 头文件,并且导入了命名空间 ege 。ege.h 则是包含的大量的定义和声明。
//graphics.h
#ifndef _GRAPHICS_H_
#define _GRAPHICS_H_
#ifndef __cplusplus
#error You must use C++ compiler, or you need filename with '.cpp' suffix
#endif
#include "ege.h"
using namespace ege;
#endif
initgraph(640, 480);
函数声明: (这里为什么有三个参数? 这是C++的默认参数,如果后面的参数没传入实参,那么就会给一个默认值)
void initgraph( int Width, int Height, int Flag = INIT_DEFAUL);
setcolor(EGERGB(0xFF, 0x0, 0x0)); 设置绘画颜色
setbkcolor(WHITE); 设置窗口背景颜色
里面的EGERGB是什么?
EGERGB 是个宏定义,将三个参数转成 RGB颜色值
EGERGB(0xFF, 0x0, 0x0) 即为 0XFF0000(红色)。三个参数都是0~255之间,用十六进制表示则是0x0 ~ 0xFF。
setcolor(EGERGB(0xFF, 0x0, 0x0)) 和 setcolor(0xFF0000) 等价。(颜色的表示后面会说明)
WHITE 是EGE定义的一个枚举值,即白色,值为 EGERGB(0xFC, 0xFC, 0xFC) 。
类似于WHITE, EGE 定义有一些常用的颜色枚举,可以直接用:
// 颜色
enum COLORS {
BLACK = 0, 黑色
BLUE = EGERGB(0, 0, 0xA8), 蓝色
GREEN = EGERGB(0, 0xA8, 0), 绿色
CYAN = EGERGB(0, 0xA8, 0xA8), 青色
RED = EGERGB(0xA8, 0, 0), 红色
MAGENTA = EGERGB(0xA8, 0, 0xA8), 品红色
BROWN = EGERGB(0xA8, 0xA8, 0), 棕色
LIGHTGRAY = EGERGB(0xA8, 0xA8, 0xA8), 浅灰
DARKGRAY = EGERGB(0x54, 0x54, 0x54), 暗灰
LIGHTBLUE = EGERGB(0x54, 0x54, 0xFC), 浅蓝
LIGHTGREEN = EGERGB(0x54, 0xFC, 0x54), 浅绿
LIGHTCYAN = EGERGB(0x54, 0xFC, 0xFC), 浅青
LIGHTRED = EGERGB(0xFC, 0x54, 0x54), 浅红
LIGHTMAGENTA = EGERGB(0xFC, 0x54, 0xFC), 浅品红
YELLOW = EGERGB(0xFC, 0xFC, 0x54), 黄色
WHITE = EGERGB(0xFC, 0xFC, 0xFC), 白色
};
可以试试看改变颜色值,都有什么变化, 比如,把设置背景颜色
setbkcolor(WHITE) 改成 setbkcolor(0xFCFC54), 或者 setbkcolor(YELLOW) 。这时背景就变成了黄色。
circle(320, 240, 100); //在坐标(320, 240)处画个半径100的圆
函数声明: (最后面的那个pimg是什么?, 表示绘制到哪个图像上,如果没有传入这个参数,那就是NULL, 代表在绘制到窗口)
void circle(int x, int y, int radius, PIMAGE pimg = NULL);
屏幕坐标系是这样子的,原点在左上角,往右是x正方向,往下是y正方向。因为窗口大小为640 x 480, 所以是(320, 240)是在窗口中心,所以圆在正中间。
VS2017 默认是没有控制台弹出的,如果你想显示控制台窗口,可以在 #include (console, 即控制台)
#define SHOW_CONSOLE
#include
CodeBlocks 默认是有控制台弹出的,可以参考 (二)EGE安装与配置中的Codeb部分如何关闭控制台
代码如下:
即通过控制台输入圆的半径,从而改变圆的大小
#define SHOW_CONSOLE
#include
#include
int main()
{
initgraph(640, 480, 0);
setcolor(EGERGB(0xFF, 0x0, 0x0));
setbkcolor(WHITE);
//控制台交互,通过输入半径值控制圆的大小
printf("请输入圆的半径(1~200)之间):");
int radius = 100;
scanf("%d", &radius);
//半径范围限制
if (radius < 1)
radius = 1;
else if (radius > 200)
radius = 200;
//绘制半径为radius的圆
circle(320, 240, radius);
getch();
closegraph();
return 0;
}
printf 是输出到控制台上的,运行时需要两个窗口切换,不方便也不美观。
所以EGE程序大体为
- 包含 graphics.h 头文件, #include
- 初始化图形窗口, initgraph(width, height, mode)
- 绘图,交互
- 关闭图形窗口, closegraph()
EGE专栏:EGE专栏