GameMaker函数说明(2)帮助文件

分类栏目:gamemaker教程

272

GameMaker函数说明(2)帮助文件

产生事件

如你所知, Game Maker 是完全事件驱动的。所有的动作都在事件中发生。有大量不同的事件。创建和销毁事件发生在实例创建或是销毁时。每一步中,系统首先运行闹钟事件。接下来运行键盘和鼠标事件,然后运行并行事件。再然后是碰撞事件,实例碰撞后设置到新的位置。最后绘制事件用来绘制实例(注意有多重视野时绘制事件在每步中调用多次)。你也可以通过代码对当前实例使用事件。下面是可用的函数 :

event_perform(type,numb) 当前实例执行指定类型事件的 numb 号码。有以下事件类型可以指定 :

ev_create 创建事件 
ev_destroy 销毁事件 
ev_step 并行事件 
ev_alarm 闹钟事件 
ev_keyboard 键盘事件 
ev_mouse 鼠标事件 
ev_collision 碰撞事件 
ev_other 其他事件 
ev_draw 绘制事件 
ev_keypress 键盘按下事件 
ev_keyrelease 键盘松开事件

有多个事件类型时,参数 numb 可以用来指定精确的事件。比如闹钟事件 numb 可以设范围 0 到 11 。键盘事件可以使用参数 keycode 。鼠标事件可以使用下面的常量 :

ev_left_button 左键 
ev_right_button 右键 
ev_middle_button 中键 
ev_no_button 没有按键 
ev_left_press 按下左键 
ev_right_press 按下右键 
ev_middle_press 按下中键 
ev_left_release 放开左键 
ev_right_release 放开右键 
ev_middle_release 放开中键 
ev_mouse_enter 移入鼠标 
ev_mouse_leave 移开鼠标 
ev_mouse_wheel_up 滚轮向上 
ev_mouse_wheel_down 滚轮向下 
ev_global_left_button 全局左键 
ev_global_right_button 全局右键 
ev_global_middle_button 全局中键 
ev_global_left_press 全局按下左键 
ev_global_right_press 全局按下右键 
ev_global_middle_press 全局按下中键 
ev_global_left_release 全局放开左键 
ev_global_right_release 全局放开右键 
ev_global_middle_release 全局放开中键

碰撞事件中要给出另一对象的索引。最后,其他事件中使用以下常量 :

ev_outside 出房间 
ev_boundary 边界 
ev_game_start 游戏开始 
ev_game_end 游戏结束 
ev_room_start 房间开始 
ev_room_end 房间结束 
ev_no_more_lives 没有生命 
ev_no_more_health 没有生命值 
ev_animation_end 结束动画 
ev_end_of_path 结束路径 
ev_user0 自定义 0 
ev_user1 自定义 1 
ev_user2 自定义 2 
ev_user3 自定义 3 
ev_user4 自定义 4 
ev_user5 自定义 5 
ev_user6 自定义 6 
ev_user7 自定义 7 
ev_user8 自定义 8 
ev_user9 自定义 9 
ev_user10 自定义 10 
ev_user11 自定义 11 
ev_user12 自定义 12 
ev_user13 自定义 13 
ev_user14 自定义 14 
ev_user15 自定义 15 
 

并行事件中使用以下常量 :

ev_step_normal 正常步 
ev_step_begin 步开始 
ev_step_end 步结束

event_perform_object(obj,type,numb) 这个函数和上面的函数相同除了这次可以指定事件给另一个对象。注意,在这些事件里的动作是当前实例的,不是给对象实例的。 
event_user(numb) 在其他事件( other events )中可以定义 16 个用户事件。只有当你调用这个函数是运行。参数 numb 必须在 0 到 15 的范围内。
event_inherited() 执行继承事件。只有实例拥有父对象是才有效 。

使用下面的只读变量可以获取当前事件执行的信息 :

event_type* 当前开始执行的事件类型。 
event_number* 当前开始执行的事件号码。 
event_object* 当前执行的事件的对象索引。 
event_action* 当前执行的事件的动作索引。( 0 为事件中第一个执行的,依次类推) 。

复杂的变量和函数

这里有一些处理出错的变量和函数。

error_occurred 显示是否有错误发生。 
error_last 用字符串显示最后出错的信息。 
show_debug_message(str) Debug 模式中显示字符串

下面的函数用来监测是否确定变量的存在以及怎样设置变量及获取他们的值。所有这些函数的变量名都是用字符串传递。

variable_global_exists(name) 返回值为名为参数 name (字符串)的全局变量是否存在。 
variable_local_exists(name) 返回值为当前实例的名为参数 name (字符串)的局部变量是否存在。 
variable_global_get(name) 返回值为给出参数 name (字符串)的全局变量的值。 
variable_global_array_get(name,ind) 返回值为给出参数name (字符串)的全局数组的参数 ind 的索引值。 
variable_global_array2_get(name,ind1,ind2) 返回值为给出参数 name (字符串)的全局二维数组变量的参数 ind1 , ind2 的索引值。 
variable_local_get(name) 返回值为给出参数 name (字符串)的局部变量的值。 
variable_local_array_get(name,ind) 返回值为给出参数 name (字符串)的局部数组的参数 ind 的索引值。 
variable_local_array2_get(name,ind1,ind2) 返回值为给出参数 name (字符串)的局部二维数组变量的参数 ind1 , ind2 的索引值。 
variable_global_set(name,value) 设置给出参数 name (字符串)的全局变量的值。 
variable_global_array_set(name,ind,value) 设置给出参数name (字符串)的全局数组的参数 ind 的索引值。 
variable_global_array2_set(name,ind1,ind2,value) 设置给出参数 name (字符串)的全局二维数组变量的参数 ind1 , ind2 的索引值。 
variable_local_set(name,value) 设置给出参数 name (字符串)的局部变量的值 
variable_local_array_set(name,ind,value) 设置给出参数name (字符串)的局部数组的参数 ind 的索引值。 
variable_local_array2_set(name,ind1,ind2,value) 设置给出参数 name (字符串)的局部二维数组变量的参数 ind1 , ind2 的索引值。

举例来说,你可以这样写 :

{

  if variable_global_exists('ammunition')

    global.ammunition += 1

  else

    global.ammunition = 0

}

你可以使用这些函数通过一种参数传递的方法给脚本传递变量,通过传递它们的字符名以及使用函数来改变它们

你可以使用下面的函数改变程序的优先级 :

set_program_priority(priority) 设置程序的优先级。可以指定 -3 到 +3 之间的值。值为 -3 时意味着程序只会在如下情况运行,电脑没有其他程序要处理时,或是所有其他的程序都空闲时。值为 -2 或 -1 时在正常线下,其他程序会有优先权。值为 0 时是正常的值。值为 +1 或 +2 为较高的优先级,可能会导致较高的速度和较平滑的游戏流程。但其他程序会得到很少的处理时间。值为 +3 时为实时模式。在实时模式中基本上所有的时间都分配到游戏当中去了。这样会导致电脑正在运行的其他应用程序发生严重的问题。当然键盘事件不再被电脑记录下来。所以只有当你想要所有的处理时间时才使用这个函数。同样要注意最好使用前仔细的检查一下并且运行前保存游戏 。

键盘

键盘互动中,存在以下几个变量和函数 :

keyboard_lastkey 最后一个按下的按键代码。请看后面的按键代码手册。你可以改变它, 例如设定成0,如果你愿意的话。 
keyboard_key 当前按下的按键代码(看后面;如果是0则表示没有按键)。 
keyboard_lastchar 最后一个按下的字符(返回字符串格式)。 
keyboard_string 返回最后一批被按下的字符,最多1024个。字符串将只包含可打印字符。

有些时候将某个按键映射成另一个按键相当有用。例如,你可能想允许玩家同时使用方向键 和数字小键盘。除了简单复制动作以外,你还可以通过映射小键盘到方向键来完成。或者你 想搞一个控制选项让玩家自己去设置按键。那么以下几个函数就会相当有用 :

keyboard_set_map(key1,key2) 映射按键代码 key1 到 key2 。 
keyboard_get_map(key) 返回当前 key 的映射代码。 
keyboard_unset_map() 重置所有被映射的按键到原始状态。

要检查某个按键或鼠标键是否被按下,你可以使用如下函数。这在需要设置多重按键的时候 会用到。

keyboard_check(key) 返回指定的 key 是否正处于被按下的状态。 
keyboard_check_pressed(key) 返回指定的按键 key 是否在上一步之后被按下。 
keyboard_check_released(key) 返回指定的按键 key 是否在上一步之后被放开。 
keyboard_check_direct(key) 直接通过硬件返回指定按键 key 是否被按下。结果取决于程 序专注的方向,它允许使用更多的按键检查。尤其是它可以检查 vk_lshift,vk_lcontrol, vk_lalt,vk_rshift,vk_rcontrolvk_ralt这样的按键代码来检测左边或右边的shift, controlalt键被按下。

以下几个函数用来处理键盘的状态 :

keyboard_get_numlock() 返回 numlock 键是否打开。
keyboard_set_numlock(on) 开关 numlock 键。 
keyboard_key_press(key) 模拟指定按键 key 的一次按键操作。 
keyboard_key_release(key) 模拟指定按键 key 的一次放开键的操作。

以下为一些存在的虚拟按键代码 :

vk_nokey 没有按键时的按键代码。
vk_anykey 任意键被按下时的按键代码。 
vk_left 左方向键的按键代码。
vk_right 右方向键的按键代码。
vk_up 上方向键的按键代码。
vk_down 下方向键的按键代码。
vk_enter 回车键 
vk_escape ESC
vk_space 空格键
vk_shift Shift
vk_control Ctrl
vk_alt Alt
vk_backspace Backspace
vk_tab Tab键 
vk_home Home 键
vk_end end 键
vk_delete delete 键
vk_insert insert 键
vk_pageup pageup 键
vk_pagedown pagedown 键
vk_pause pause/break 键
vk_printscreen printscreen/sysrq 键
vk_f1 ... vk_f12 功能键 F1 ~ F12
vk_numpad0 ... vk_numpad9
 数字小键盘数字键
vk_multiply 数字小键盘乘号
vk_divide 数字小键盘分号
vk_add 数字小键盘加号
vk_subtract 数字小键盘减号
vk_decimal 数字小键盘小数点

至于字母键可以使用类似 ord('A') 这样的格式表示按键代码(要用大写字母)。数字键就 用ord('5') 这样的格式。以下是在 keyboard_check_direct 里要用到的按键代码 :

vk_lshiftshift 键 
vk_lcontrol 左 control 键
vk_lalt 左 alt 键
vk_rshift 右 shift 键
vk_rcontrol 右 control 键
vk_ralt 右 alt 键

例如,假设你有一个对象可以通过方向键控制移动,你可以用如下代码实现步行事件 :

{

  if (keyboard_check(vk_left))  x -= 4;

  if (keyboard_check(vk_right)) x += 4;

  if (keyboard_check(vk_up))    y -= 4;

  if (keyboard_check(vk_down))  y += 4;

}

当然在动作库里直接拖放设定更方便一些

这里有一些额外的键盘处理函数。

keyboard_clear(key) 清除按键 key 的状态。这意味着除非它被连发,否则不会产生任何 按键代码事件。 
io_clear() 清除所有键盘及鼠标状态。 
io_handle() 操作用户 io,更新键盘及鼠标状态。 
keyboard_wait() 等待,直到用户按下键盘上的某个键。

鼠标

在鼠标处理中,存在以下几个变量和函数 :

mouse_x* 鼠标在房间内的横坐标。无法更改。 
mouse_y* 鼠标在房间内的纵坐标。无法更改。 
mouse_button 当前按下的鼠标键。可以有如下集中状态:mb_none,mb_any,mb_left, mb_right,以及mb_middle。 
mouse_lastbutton 最后一次按下的鼠标键。

为了检查指定的鼠标键是否被按下,你可以使用如下几个函数。这些函数尤其在多个键按下 时非常有用。

mouse_check_button(numb) 返回某个鼠标键是否被按中(numb 为 mb_none, mb_left, mb_middle, or mb_right 中的一种)。 
mouse_check_button_pressed(numb) 返回某个鼠标键在上一次行动后是否被按下(numb 为 mb_none, mb_left, mb_middle, or mb_right 中的一种)。 
mouse_check_button_released(numb) 返回某个鼠标键在上一次行动后是否被放开(numb 为 mb_none, mb_left, mb_middle, or mb_right 中的一种)。

这里有一些额外的鼠标处理函数。

mouse_clear(button) 清除鼠标按键 button 的状态,直到玩家将它放开并再次按下。 
io_clear() 清除所有键盘及鼠标状态。 
io_handle() 管理用户 io,更新键盘及鼠标状态。 
mouse_wait() 等待,直到用户按下某个鼠标键。

精灵和图像

每个对象都有一个相关联的精灵。精灵可以是一张图像或是一组连续的图像。对于对象的每 个实例,程序都要在屏幕上绘制对应的图像,在实例的坐标(x,y)原点(这个点在精灵属 性里定义)上。当存在多幅图像的时候,会重复循环显示各个图像,形成动画效果。这里有 一批函数负责处理图像的绘制。他们可以用来改变效果。每个实例含有如下几个变量 :

visible 如果 visible 为真(1),则图像就被绘制出来,否则就不予绘制。不可见的实例 仍然是活动的并可以触发碰撞事件;只是你看不到而已。将 visible 设置为假可以用在例 如手柄对象中(将他们设置为非固态形式以避免碰撞事件)或者隐藏的机关等。 
sprite_index 实例的当前精灵索引编号。你可以更改它使实例更换另一个精灵。根据不同 的值你可以设定显示你所指定的不同的精灵。更改精灵并不会更改当前可见的子图像索引编 号。 
sprite_width* 指定精灵的宽度。这个值无法更改但你可能会用到它。 
sprite_height* 指定精灵的高度。这个值无法更改但你可能会用到它。 
sprite_xoffset* 在精灵属性中设定的精灵水平偏移。这个值无法更改但你可能会用到它。
sprite_yoffset* 在精灵属性中设定的精灵垂直偏移。这个值无法更改但你可能会用到它。
image_number* 当前实例内的精灵包含的子图像数量(无法更改)。 
image_index 当图像包含多个子图像的时候程序会反复循环显示他们。这个变量决定了当前 将要绘制的子图像编号(从0开始)。你可以更改这个变量以改变当前图像。程序会按照新 的索引编号继续循环绘制图像。 
image_speed 循环绘制子图像的速度。为 1 的时候表示每走一步绘制一次子图像。更小的 数值代表更慢的绘制速度,同一子图像可以重复多次绘制。更大的数值下会忽略若干子图像 的绘制,让精灵看起来动作更快。有些时候你只想让某一幅子图像显示出来而不是绘制所有 的子图像。你可以设置速度为 0 并选择正确的子图像就可以了。例如,假设你有一个对象 可以旋转,同时你建立了一个精灵,里面有一些指针(逆时针)。那么,在这个对象的单步 事件中你可以这样设置

{

  image_index = direction * image_number/360;

  image_speed = 0;

}

depth 通常图像会在你放置实例的图层上进行绘制。你可以通过设定图像深度来改变位置。 默认值是 0 ,除非你在对象属性中设置了其他数值。深度值越高代表实例在较小深度值的 实例后面。(当然你也可以使用负值)。设定深度值可以确保实例以你指定的方式被绘制出 来(比如让飞机在云层前面显示)。背景实例应该有比较高的深度值(正值),而前景实例 则应当有比较低的深度值(或者是负值)。 
image_xscale 放大或缩小图像。为 1 的时候代表正常尺寸。你需要分别设置水平尺寸和垂 直尺寸。改变尺寸的同时也会改变图像的宽度和高度,并可能影响你原先预计的碰撞事件的 结果。更改尺寸可以造成3D效果。你可以设置值为-1来水平反转精灵图像。 
image_yscale 垂直缩放。1 为原尺寸。你可以设为 -1 来垂直反转精灵图像。 
image_angle 决定精灵的旋转角度。以度数决定,逆时针。设为 0 代表不旋转。

image_alpha 设定图像绘制的阿尔法透明通道的值。设为 1 代表常用的不透明状态。设为 0 代表完全透明。 
image_blend 绘制精灵时混合颜色。c_white 是默认设置。当你指定一个不同的数值时,图 像就会与这个颜色混合。这个可以在需要给精灵快速上色的时候使用。

bbox_left* 实例图像碰撞盒的左侧。(缩放比加入计算) 
bbox_right* 实例图像碰撞盒的右侧。 
bbox_top* 实例图像碰撞盒的顶部。 
bbox_bottom* 实例图像碰撞盒的底部。

背景

每个房间最多可以放入8个背景。同时还有一个背景色。所有背景都可以通过以下几个变量 加上一些代码进行改动(这些背景是从07的编号,以区分不同的背景):

background_color 房间的背景颜色。 
background_showcolor 指定是否以背景色清除窗口。 
background_visible[0..7] 指定背景图像是否可见。 
background_foreground[0..7] 指定背景图像是否为前景。 
background_index[0..7] 背景图像的索引编号。 
background_x[0..7] 背景图像的 X 坐标。 
background_y[0...7] 背景图像的 Y 坐标。 
background_width[0...7]* 背景图像的宽度。 
background_height[0...7]* 背景图像的高度。 
background_htiled[0..7] 是否水平图块。 
background_vtiled[0..7] 是否垂直图块。 
background_xscale[0..7] 背景水平缩放。(必须为正值;无法使用负值来反转背景) 
background_yscale[0..7] 背景垂直缩放。(必须为正值;无法使用负值来反转背景) 
background_hspeed[0..7] 背景水平卷动速度(单位 像素/步)。 
background_vspeed[0..7] 背景垂直卷动速度(单位 像素/步)。 
background_blend[0..7] 使用混合颜色绘制背景。默认值为 c_white 。background_alpha[0..7] 在绘制背景的时候设置阿尔法透明通道数值。 1 代表完全不透明 ;0 代表完全透明。

绘制精灵和背景

对象通常会有一个要绘制的精灵图像。打你可以在绘制事件中绘制其他东西。本章及下章内容将会给你相关的信息。首先,这里有一些函数负责用不同的方式绘制精灵和背景。它们会给你提供精灵更多的显示方式。当然也可以用在绘制(局部)背景上。

draw_sprite(sprite,subimg,x,y) 在坐标(x,y)绘制子图像 subimg (-1 代表当前子图像,0N代表各子图像编号)。(不包含颜色混合和阿尔法透明通道)
draw_sprite_stretched(sprite,subimg,x,y,w,h) 将精灵扩展填充至左上角坐标为(x,y),宽度高度分别为w,h的方形区域内。 
draw_sprite_tiled(sprite,subimg,x,y) 将精灵作为图块在整个房间内进行绘制。(x,y) 是其中精灵的绘制坐标。 
draw_sprite_part(sprite,subimg,left,top,width,height,x,y) 在坐标(x,y)绘制指定范围内的子图像的子图区域 (-1 代表当前子图像)(从子图像内位置 left,top,width,height )。

draw_background(back,x,y) 绘制背景在坐标(xy)。(不包含颜色混合和阿尔法透明通道)
draw_background_stretched(back,x,y,w,h)
 将背景扩展填充至左上角坐标为(x,y),宽度高度分别为w,h的方形区域内。
draw_background_tiled(back,x,y) 背景作为片平铺在房间中,以(x,y)为起始点
draw_background_part(back,left,top,width,height,x,y) 绘制背景部分,以左上为原点的xy

 

draw_sprite_ext(sprite,subimg,x,y,xscale,yscale,rot,color,alpha) 代表所要绘制的精灵,subimg 代表要绘制的具体子图像,(x,y) 代表绘制的坐标,(xscale,yscale) 代表要绘制的具体缩放尺寸, rot 代表图像逆时针旋转绘制的角度,color 代表需要混合的颜色(c_white 为默认值),alpha 代表要绘制的阿尔法透明通道数值(0 代表完全不透明, 1 代表完全透明)。这个函数可以创造很多的效果(比如部分透明的爆炸效果)。
draw_sprite_stretched_ext(sprite,subimg,x,y,w,h,color,alpha)
 精将精灵扩展填充至左上角坐标为(x,y),宽度高度分别为w,h的方形区域内。color 代表需要混合的颜色(c_white 为默认值),alpha 代表要绘制的阿尔法透明通道数值(代表完全不透明, 代表完全透明)。

draw_sprite_tiled_ext(sprite,subimg,x,y,xscale,yscale,color,alpha) 将精灵作为图块在整个房间内进行绘制。(x,y) 是其中精灵的绘制坐标。(xscale,yscale) 代表要绘制的具体缩放尺寸。color 代表需要混合的颜色(c_white 为默认值),alpha 代表要绘制的阿尔法透明通道数值(代表完全不透明, 代表完全透明)。 

draw_sprite_part_ext(sprite,subimg,left,top,width,height,x,y,xscale,yscale,color,alpha) 在坐标(x,y)绘制指定范围内的子图像的子图区域 -1 代表当前子图像)(从子图像内位置 left,top,width,height )。(xscale,yscale) 代表要绘制的具体缩放尺寸。color 代表需要混合的颜色(c_white 为默认值),alpha 代表要绘制的阿尔法透明通道数值(代表完全不透明, 代表完全透明)。 

draw_sprite_general(sprite,subimg,left,top,width,height,x,y,xscale,yscale,rot,c1,c2,c3,c4,alpha) 在左上角坐标为(x,y)绘制指定范围内的子图像的子图区域 -1 代表当前子图像)(从子图像内位置 left,top,width,height )。(xscale,yscale) 代表要绘制的具体缩放尺寸。rot 代表图像逆时针旋转绘制的角度。在左上,右上,右下,左下四个地方指定混合颜色,阿尔法透明通道值 alpha 01之间)。 注意旋转是围绕左上角进行的。 
draw_background_ext(back,x,y,xscale,yscale,rot,color,alpha) back
代表所要绘制的背景, (x,y) 代表绘制的坐标,(xscale,yscale) 代表要绘制的具体缩放尺寸, rot 代表图像逆时针旋转绘制的角度,color 代表需要混合的颜色(c_white 为默认值),alpha 代表要绘制的阿尔法透明通道数值(代表完全不透明, 代表完全透明)。draw_background_stretched_ext(back,x,y,w,h,color,alpha) 将背景扩展填充至左上角坐标为(x,y),宽度高度分别为w,h的方形区域内。color 代表需要混合的颜色(c_white 为默认值),alpha 代表要绘制的阿尔法透明通道数值(代表完全不透明, 代表完全透明)。 

draw_background_tiled_ext(back,x,y,xscale,yscale,color,alpha) 将背景在整个房间内平铺绘制。(x,y) 是其中背景的绘制坐标。(xscale,yscale) 代表要绘制的具体缩放尺寸。color 代表需要混合的颜色(c_white 为默认值),alpha 代表要绘制的阿尔法透明通道数值(代表完全不透明, 代表完全透明)。 
draw_background_part_ext(back,left,top,width,height,x,y,xscale,yscale,color,alpha) 
在坐标(x,y)绘制指定范围内的背景区域(从背景内位置 left,top,width,height )。(xscale,yscale) 代表要绘制的具体缩放尺寸。color 代表需要混合的颜色(c_white 为默认值),alpha 代表要绘制的阿尔法透明通道数值(代表完全不透明, 代表完全透明)。 
draw_background_general(back,left,top,width,height,x,y,xscale,yscale,rot,c1,c2,c3,c4,alpha)
 在左上角坐标为(x,y)绘制指定范围内的背景区域(从背景内位置 left,top,width,height )。(xscale,yscale) 代表要绘制的具体缩放尺寸。rot 代表图像逆时针旋转绘制的角度。在左上,右上,右下,左下四个地方指定混合颜色,阿尔法透明通道值 alpha 01之间)。 注意旋转是围绕左上角进行的。 

绘制形状

这里有一整套函数负责绘制不同的模具。当然也有一些函数负责绘制文本(下一章提到)。 你可以只用这些函数绘制一个对象的事件;这些函数通常在除了代码之外的地方并不会对事 件有所反应。要记住,实例之间的碰撞只和他们的精灵(或者遮罩)有关,并不和你绘制的 东西有联系。以下的绘制函数可以绘制基本的变形动作。

draw_clear(col) 使用给定的颜色清除全部房间(没有包含阿尔法混合)。 
draw_clear_alpha(col,alpha) 使用给定的颜色和阿尔法值清除整个房间(在表面处理时经 常用到)。 
draw_point(x,y) 在坐标(x,y) 上绘制一个使用当前颜色的点。 
draw_line(x1,y1,x2,y2) 从坐标(x1,y1)(x2,y2)绘制一条直线。 
draw_rectangle(x1,y1,x2,y2,outline) 在指定坐标之间绘制一个矩形。outline 指定是只 描绘边框(真 true),还是要填充整个区域(假 false)。 
draw_roundrect(x1,y1,x2,y2,outline) 在指定坐标之间绘制一个圆角矩形。outline 指定是只描 绘边框(真 true),还是要填充整个区域(假 false)。 
draw_triangle(x1,y1,x2,y2,x3,y3,outline) 在指定坐标之间绘制一个三角形。outline 指定是只描绘边框(真 true),还是要填充整个区域(假 false)。 
draw_circle(x,y,r,outline) 以坐标(x,y)为圆心,r 为半径绘制一个圆形。outline 指定 是只描绘边框(真 true),还是要填充整个区域(false)。 
draw_ellipse(x1,y1,x2,y2,outline) 绘制一个椭圆。outline 指定是只描绘边框(真 true),还是 要填充整个区域(假 false)。 
draw_arrow(x1,y1,x2,y2,size) 绘制一个从坐标(x1,y1)(x2,y2) 的箭头。size 指定箭 头的尺寸,单位像素。 
draw_button(x1,y1,x2,y2,up) 绘制一个按钮, up 指定按钮状态为上(1)还是下(0)。 
draw_path(path,x,y,absolute) 通过这个函数你可以从房间坐标(x,y)之间绘制一条指定的 路径 path 。如果 absolute 为真,路径就会以原先设定的位置进行绘制,而xy就被无视 了。 
draw_healthbar(x1,y1,x2,y2,amount,backcol,mincol,maxcol,direction,showback,showborder) 绘制一个健康条。(或者其他任何一种表现数值变化的颜色条,比如:攻击 力)。(x1,y1)(x2,y2)代表整个条的范围。amount 代表条内颜色填充程度的百分比(0 到 100)backcol 为条的背景颜色,mincol 和maxcol 代表条从0 到100之间的颜色变化。 中间值在两端颜色之间渐变。direction 代表条的绘制方向。 0 代表从左边开始, 1 代表 从右边开始, 2 代表从上开始, 3 代表从下开始。 showback 指定是否显示背景框, showborder 指定是否显示边框。

以上几个函数的颜色和阿尔法值都可以通过以下几个函数进行调整。

draw_set_color(col) 设置当前绘制颜色。 
draw_set_alpha(alpha) 设置当前绘制时的阿尔法透明通道值。(从0 到10代表完全透明, 1代表完全不透明)。 
draw_get_color() 返回当前绘制的颜色。 
draw_get_alpha() 返回当前绘制的阿尔法透明通道值。

所有颜色的定义: :

c_aqua 水色
c_black 黑色
c_blue 蓝色
c_dkgray 深灰
c_fuchsia 紫红
c_gray 灰色
c_green 绿色
c_lime 石灰色
c_ltgray 浅灰
c_maroon 赤褐色
c_navy 深蓝
c_olive 茶青色 
c_purple 紫色
c_red 红色
c_silver 银色
c_teal茶绿色
c_white白色
c_yellow 黄色

以下函数可以帮助你创建自己想要的颜色 。

make_color_rgb(red,green,blue) 返回一个指定RGB值的颜色。red,green,blue 三个参数 必须为0255的数值。 
make_color_hsv(hue,saturation,value) 返回指定色调 hue ,饱和度 saturation,以及 明暗度 value 的颜色(所有参数都必须在0255之间)。 
color_get_red(col) 返回指定红色值 col 的颜色。 
color_get_green(col) 返回指定绿色值 col 的颜色。 
color_get_blue(col) 返回指定蓝色值 col 的颜色。 
color_get_hue(col) 返回指定色调值 col 的颜色。 
color_get_saturation(col) 返回指定饱和度 col 的颜色。 
color_get_value(col) 返回指定明暗度 col 的颜色。 
merge_color(col1,col2,amount) 返回颜色 col1,和col2 的混合颜色。混合程度由 amount 决定。0 代表完全混合为颜色 col1 ,1 代表完全混合为颜色 col2

以下有几个其他类型的函数。

draw_getpixel(x,y) 在房间的指定坐标(x,y)返回像素的颜色。这个函数不是很快,所以要 谨慎使用。 
screen_save(fname) 以给定的文件名 fname 保存屏幕截图为 bmp 文件。常用来截屏。 
screen_save_part(fname,x,y,w,h) 保存指定位置的屏幕为给定的文件名。

字体和文本

在游戏中你需要绘制文本。要绘制文本你需要先指定要使用的字体。字体可以通过字体资源 创建(不管是在GM设计界面里还是使用函数创建资源)。这里有很多函数可以通过不同方法 绘制文本。每个函数你都要指定文本在屏幕上显示的位置。有两个函数负责指定文本的水平 及垂直坐标

文本的绘制涉及以下函数 :

draw_set_font(font) 设定绘制文本时将要使用的字体。 -1 代表默认字体(Arial 12)。 
draw_set_halign(halign) 设定绘制文本的水平坐标参数。选择下面三个中的一个作为值:

fa_left 左 
fa_center 中 
fa_right 右

draw_set_valign(valign) 设定绘制文本的垂直坐标参数。选择下面三个中的一个作为值 :

fa_top 上 
fa_middle  
fa_bottom 下

draw_text(x,y,string) 在坐标 (x,y) 处绘制字符串 string ,一个'#'通配符或者一个回 车符 chr(13) 或者断行符 chr(10) 会让字符串另起一行,这样我们就可以实现多行文本的 绘制(使用 '\#' 显示字符 '#' 本身)。 
draw_text_ext(x,y,string,sep,w) 基本与上面的函数作用相同,但增加了两个功能。首先 sep 代表行间距,设成 -1 代表使用默认值。 w 代表行宽,单位像素。超出行宽的部分 会以空格或'-'进行分行。设为 -1 代表不换行。 
string_width(string) 当前字体及将要通过 draw_text () 函数绘制的字符串 string 的 宽度。可以用来精确定位图像位置。 
string_height(string) 当前字体及将要通过 draw_text () 函数绘制的字符串 string 的 高度。可以用来精确定位图像位置。 
string_width_ext(string,sep,w) 当前字体及将要通过draw_text_ext () 函数绘制的字 符串 string 的宽度。可以用来精确定位图像位置。sep 代表行间距, w 代表行宽。 
string_height_ext(string,sep,w) 当前字体及将要通过draw_text_ext () 函数绘制的字 符串 string 的高度。可以用来精确定位图像位置。sep 代表行间距, w 代表行宽。

以下函数允许你对文本进行缩放和旋转以及渐变文本颜色。

draw_text_transformed(x,y,string,xscale,yscale,angle) 在坐标(x,y),以 xscale, yscale指定的缩放尺寸和逆时针旋转 angle 角度的方式绘制文本 string。 
draw_text_ext_transformed(x,y,string,sep,w,xscale,yscale,angle) 功能与上面类似, 但加入了行间距 sep 和 行宽 w 。可以绘制多行文本。 
draw_text_color(x,y,string,c1,c2,c3,c4,alpha) 在坐标(x,y),左上,右上,右下,左 下四个地方指定文本颜色,以阿尔法透明通道值 alpha (01之间)绘制文本 string。 
draw_text_ext_color(x,y,string,sep,w,c1,c2,c3,c4,alpha) 上面函数的多行显示变体。 
draw_text_transformed_color(x,y,string,xscale,yscale,angle,c1,c2,c3,c4,alpha) 于draw_text_transformed() 相同,但是多了颜色渐变
draw_text_ext_transformed_color(x,y,string,sep,w,xscale,yscale,angle,c1,c2,c3,c4,alpha)draw_text_ext_transformed()相同 但是多了颜色渐变