gamemaker函数中文帮助 联系客服

发布时间 : 星期三 文章gamemaker函数中文帮助更新完毕开始阅读8e04da21dc36a32d7375a417866fb84ae45cc3ea

表面让这些都变为可能。它们使用起来其实很简单。首先你要创建一个表面。然后你指定接 下来的绘图工作要在这张表面上进行。从现在开始所有的绘图操作都会在这张表面上进行。 结束绘图后你可以重新设置绘图目标,这样后面的绘图操作就会重新回到屏幕上了。你可以 通过各种方式在屏幕上设置表面,或者当作材质使用它。这里有些东西你需要掌握。留意文 末的标注。

以下几个函数是用来处理表面的

surface_create(w,h) 创建一个表面,w,h 分别代表宽度,高度。返回表面的 id ,后面 会用到它。要注意表面是不会被自动清除的,需要用户负责清除。(先设置表面为操作目标, 然后调用清除函数)。

surface_free(id) 清除指定 id 的表面占用的内存。 surface_exists(id) 返回指定 id 的表面是否存在。 surface_get_width(id) 返回指定 id 的表面的宽度。 surface_get_height(id) 返回指定 id 的表面的高度。

surface_get_texture(id) 返回与指定 id 的表面对应的材质。可以在表面图像的材质对象 中使用。

surface_set_target(id) 将绘图目标指定为 id 的表面。其后的所有绘图操作都将在指定 表面上进行。这个函数只是简单的将指针覆盖至表面。 surface_reset_target() 重置绘图目标到普通屏幕上。

surface_getpixel(id,x,y) 返回指定 id 的表面上坐标为 (x,y) 的像素的颜色。速度不是 很快,所以要谨慎使用。

surface_save(id,fname) 保存指定 id 的表面到名为 fname 的BMP图像文件中。常用来进 行截屏。

surface_save_part(id,fname,x,y,w,h) 保存指定 id 的表面上一部分((x,y)为坐标, w、h为宽度、高度)到指定的文件名。

draw_surface(id,x,y) 在坐标(x,y) 绘制指定 id 的表面。(不包含颜色混合及阿尔法通 道设置)。

draw_surface_stretched(id,x,y,w,h) 在坐标(x,y)的宽高分别为 w 、h 的矩形范围内填 充绘制表面。

draw_surface_tiled(id,x,y) 将表面作为图块填充绘制至整个房间。

draw_surface_part(id,left,top,width,height,x,y) 绘制表面的一部分。

draw_surface_ext(id,x,y,xscale,yscale,rot,color,alpha) 带有颜色混合及阿尔法透明 通道设置的 draw_surface 函数增强版。

draw_surface_stretched_ext(id,x,y,w,h,color,alpha) 在坐标(x,y) 绘制指定 id 的表面。包含颜色混合及阿尔法通道设置。

draw_surface_tiled_ext(id,x,y,xscale,yscale,color,alpha) 将表面作为图块填充绘制至整个房间。包含颜色混合及阿尔法通道设置。

draw_surface_part_ext(id,left,top,width,height,x,y,xscale,yscale,color,alpha) 绘制表面的一部分。draw_surface_part 的升级版。

draw_surface_general(id,left,top,width,height,x,y,xscale,yscale,rot,c1,c2,c3,c4,alpha) 在坐标(x,y)绘制指定范围内的表面区域(从表面内位置 left,top,width,height )。(xscale,yscale) 代表要绘制的具体缩放尺寸。rot 代表表面逆时针旋转绘制的角度,在左上,右上,右下,左下四个地方指定混合颜色,alpha 代表要绘制的阿尔法透明通道数值(0 代表完全不透明, 1 代表完全透明)。

surface_copy(destination,x,y,source) 将指定表面(source)复制到目标表面(destination)的坐标(x,y)上。(如果没有其他形式的混合)

surface_copy_part(destination,x,y,source,xs,ys,ws,hs) 将指定表面的指定区域(source)复制到目标表面(destination)的坐标(x,y)上。(如果没有其他形式的混合) 注意没有函数可以复制一定区域的屏幕到一个表面上。(这是不可能的,因为屏幕和表面之间存在一些格式上的差异)如果这是必要的,你必须设置一个表面作为复制目标,然后绘制房间。你可以通过复制这个表面来得到房间的局部。

注意你完全可以在表面上生成精灵和背景,在这方面你通过改变资源来了解的更多。 当你使用这些函数时有一些注意事项,尤其是以下几点: 你不能去改变绘图目标当你已经正在进行屏幕绘图工作,也就是说,不能在绘图事件中改变绘图目标。这会在指针和视点上造成严重的错误。

“表面”不能正确的为3d模块服务,你可以在3d模块外使用他们,例如在使用表面时先执行d3d_end()函数,但你一旦开始继续使用3d模块,表面将会被消减。

由于速度的原因,表面只能被维持在视频内存中。这使得你可能失去表面,比如当屏幕分辨率改变和弹出屏幕保护时。

当你储存游戏时,表面不会被存储。 图块

现在你已经明白怎样在房间里添加图块。图块是背景资源的一部分。图块只是可见的一些图 像。他们并不会产生事件或者碰撞。所以图块的执行速度要比对象快许多。任何不需要产生 事件或者碰撞的物体最好都设定成图块。同时,在产生碰撞事件的简单对象中使用精美的图 块图像也是不错的选择。

你可以控制图块的能力要比你想象的大得多。你可以在设计房间得时候添加他们,但你也可 以在游戏运行过程中添加他们。你可以改变他们得位置,甚至缩放他们得大小或让他们部分 透明。一个图块拥有如下几个属性 :

? ? ? ? ? ? ? ?

background. 要调用图块的背景资源名称。

left, top, width, height. 要调用图块的背景区域。 x,y. 图块在房间放置的位置,x,y 为图块左上角的坐标。

depth. 图块在房间里的深度。你可以选择任意深度,让图块在对象实例之间显示。 visible. 图块是否可见。

xscale, yscale. 图块的纵横缩放比。(默认为 1 ,不缩放) blend. 用来混合绘制图块的颜色。

alpha. 图块的阿尔法透明通道值。 1 代表不透明;0 代表完全透明。

要改变图块的属性你需要先指定图块的 id 。当你在房间中添加图块时,窗口底部的信息栏 将会显示图块的 id 。同时也有一个函数可以找到图块的 id 。 以下几个函数负责处理图块相关操作 :

tile_add(background,left,top,width,height,x,y,depth) 在房间中添加新的图块。函数 返回生成图块的 id 。

tile_delete(id) 删除指定 id 的图块。

tile_exists(id) 返回指定 id 的图块是否存在。

tile_get_x(id) 返回指定 id 的图块的 x 横坐标。 tile_get_y(id) 返回指定 id 的图块的 y 纵坐标。

tile_get_left(id) 返回指定 id 的图块的 left 属性值。 tile_get_top(id) 返回指定 id 的图块的 top 属性值。 tile_get_width(id) 返回指定 id 的图块的 width 属性值。 tile_get_height(id) 返回指定 id 的图块的 height 属性值。 tile_get_depth(id) 返回指定 id 的图块的 depth 属性值。 tile_get_visible(id) 返回指定 id 的图块的 visible 属性值。 tile_get_xscale(id) 返回指定 id 的图块的 xscale 属性值。 tile_get_yscale(id) 返回指定 id 的图块的 yscale 属性值。

tile_get_background(id) 返回指定 id 的图块的 background 属性值。 tile_get_blend(id) 返回指定 id 的图块的 blend 属性值。 tile_get_alpha(id) 返回指定 id 的图块的 alpha 属性值。

tile_set_position(id,x,y) 设置指定 id 的图块的坐标为(x,y)。

tile_set_region(id,left,right,width,height) 设定指定 id 的图块在背景上的矩形区域。

tile_set_background(id,background) 设定指定 id 的图块的背景 background 。 tile_set_visible(id,visible) 设定指定 id 的图块是否可见。 tile_set_depth(id,depth) 设定指定 id 的图块的深度。

tile_set_scale(id,xscale,yscale) 设定指定 id 的图块的缩放比。

tile_set_blend(id,color) 设定指定 id 的图块的混合颜色。tile_set_alpha(id,alpha) 设定指定 id 的图块的阿尔法透明通道值。

以下函数处理图块的层次,就是同一深度下的图块叠加操作

tile_layer_hide(depth) 隐藏指定深度 depth 的所有图块。 tile_layer_show(depth) 显示指定深度 depth 的所有图块。 tile_layer_delete(depth) 删除指定深度 depth 的所有图块。

tile_layer_shift(depth,x,y) 移动指定深度 depth 下的所有图块向坐标(x,y)移动。可以 用来搭建卷轴移动的图块层。

tile_layer_find(depth,x,y) 返回给定深度 depth 下,坐标(x,y) 的图块 id 。如果没有 找到则返回 -1 。如果有多个结果则返回第一个的 id 。

tile_layer_delete_at(depth,x,y) 删除指定深度 depth 下,坐标(x,y) 的图块。如果有 多个结果则全部删除。

tile_layer_depth(depth,newdepth) 将指定深度 depth 下的所有图块的深度更改为新的深 度 newdepth 。 显示

显示代表整个显示器的显示区域。它有一个尺寸(通常是1024×768或1280×1024),一个 色深,就是单个像素使用的颜色比特位数(通常有16位=高彩色或者32位=真彩色),以及 一个刷新率,代表每秒钟画面刷新显示的次数(通常在60到120之间)。这些设置都可以通 过显示属性进行更改。在游戏运行中,尤其处于全屏模式下运行时,更改这些属性是非常重 要的。所有设置都可以在游戏的全局设定中进行初始化设定。要在游戏中操作的话需要以下 几个函数。执行后需要一段延迟时间以进行相关资源的重建工作。display_get_width() 返回显示的像素宽度。 display_get_height() 返回显示的像素高度。 display_get_colordepth() 返回显示的色深。 display_get_frequency() 返回显示的刷新率。

display_set_size(w,h) 设定显示的宽度和高度,单位像素。返回是否成功。(记住只有正 确的组合才被允许)。

display_set_colordepth(coldepth) 设置色深。通常只有16和32两种允许值。返回是否成 功。

display_set_frequency(frequency) 设置刷新率。通常只有很少的几个允许值( 比如60、75、85等等)。返回是否成功。

display_set_all(w,h,frequency,coldepth) 一次性设置。 -1 代表不更改。返回是否成功。

display_test_all(w,h,frequency,coldepth) 返回给定的设置是否允许。 -1 代表不更改。

display_reset() 返回设置到程序初始状态。

有些时候还有另一些信息比较有用,比如程序开始时的鼠标位置或更改这个位置。下面的函 数用来处理这样的需求 :

display_mouse_get_x() 返回鼠标在屏幕上位置的横坐标 . display_mouse_get_y() 返回鼠标在屏幕上位置的纵坐标 . display_mouse_set(x,y) 设置鼠标位置到指定的坐标(x,y)。 窗口

游戏实际执行是实在一个窗口中。这个窗口有一些属性,和其他物件一样它有一个边框,即 使它处于全屏模式。通常这些都在游戏全局设定里设置。但你也可以在游戏中更改它们。以 下几个函数是用来处理这些任务的 :

window_set_visible(visible) 设置游戏窗口是否可见。当然通常状况下你会希望游戏窗口 一直可见。处于不可见状态的窗口不会对任何键盘事件产生反应。 window_get_visible() 返回游戏窗口是否可见。

window_set_fullscreen(full) 设置窗口为全屏模式。 window_get_fullscreen() 返回窗口是否处于全屏模式。

window_set_showborder(show) 设置是否显示窗口的边框(全屏模式下不会显示边框)。 window_get_showborder() 返回窗口是否显示边框。

window_set_showicons(show) 设置窗口图标(最小化,最大化,关闭)是否显示(全屏模 式下不会显示)。

window_get_showicons() 返回窗口是否显示边框图标。 window_set_stayontop(stay) 设置窗口是否一直处于最前。