GUI基础知识

现在我们将演示如何进行基本的GUI编程。我们要做的第一件事就是打开窗户!

include "gui/__init__";
open FlxGui;

println$ "Basic Window Test";
FlxGui::init();

var w = create_resizable_window("Felix:gui_01_window_01",100,100,400,400);
w.add$ mk_drawable FlxGuiSurface::clear lightgrey;
w.update();
w.show();

sleep(15.0);

felixgui在默认情况下不包括在内,因此我们必须首先将库包含在

include "gui/__init__";

尽管这使库可用,但我们必须在库中所有函数的名称前面加上前缀 FlxGui:: 使用它们。由于程序员不喜欢输入东西,我们将打开库,因此函数都在当前范围内,可以不使用前缀。

open FlxGui;

接下来,我们将打印一个数字到标准输出,这样我们就知道哪个程序正在运行,然后初始化库。初始化是SDL强加的一项要求,SDL在某些平台上有很多工作要做,以连接到GUI设备,如屏幕、触摸(触觉)输入、操纵杆、鼠标、键盘、音频和其他多媒体硬件。

println$ "Basic Window Test";
FlxGui::init();

现在是时候玩了!我们将创建一个可调整大小的窗口:

var w = create_resizable_window("Felix:gui_01_window_01",100,100,400,400);

第一个参数是窗口的标题,它应该出现在标题栏上(OSX上没有!因为没有暂停来接受输入)。

接下来的四个参数描述了窗的几何结构。前两个是x和y坐标。SDL坐标系将原点放在左上角,x在屏幕下方增加。

测量单位约为像素。我之所以这么说,大概是因为在带有视网膜显示屏的Mac电脑上,每个像素通常是屏幕上的四个显示元素。为了混淆这个问题,Mac可以进行硬件扩展。你只要做实验就行了!

第二个值是窗口工作区的宽度和高度,这不包括标题栏。但是x和y坐标是整个窗口的左上角,包括标题栏!

我们创建的是一个表示窗口的数据结构。下一步我们要做的是在里面放一些彩色像素。

w.add$ mk_drawable FlxGuiSurface::clear lightgrey;

这是一个基本操作的例子,在windows显示表面添加用于绘图的命令。

这个 w.add 方法添加 可抽出的 放在窗户上的抽屉清单上 w .

这个 mk_drawable 方法是构造可绘制对象的函数。它的第一个参数是实际的绘图命令, FlxGuiSurface::clear 它能清除整个表面。在本例中,第二个参数是该命令的参数 lightgrey ,它告诉清除命令在要清除的曲面上写入什么颜色。

在这一点上,我们实际上还没有画窗户。我们所做的是打包图纸说明,以及 预定的 以后再画。

实际上,我们要这样做:

w.update();

现在我们已经在窗口表面的系统内部表示上绘制了我们计划绘制的对象,但是屏幕上仍然没有显示任何内容!

这是因为窗口尚未显示。我们一直在利用它,而它是无形的。所以我们现在可以看到:

w.show();

最后,我们希望窗户在四周停留15秒,这样你就可以欣赏你的艺术作品了。

sleep(15.0);

这会使程序休眠15秒。参数是一个双精度浮点数,表示以秒为单位的延迟。小数点是必需的,后面的零是必须的!