GameMaker8.0 新手教程 Part 4 -浅谈房间-

分类栏目:gamemaker教程

1213

GameMaker8.0 新手教程 Part 4 -浅谈房间-
我们可以将玩游戏类比为参观一所房子,一所房子有很多房间,而我们同一时间只能在一间房间里(即游戏窗口每次只能展现一个Room),每个房间里面都有各种各样的家具(即每个Room里都有各种各样的Objects),不同的房间有不同的家具,也可能有相同的家具(不同的Rooms里有不同的Objects,但是也可以有相同的Objects)。
房间(Rooms)对象(Objects)是依存关系,没有房间,对象无法将自己展现给玩家;没有对象,房间只是一个空壳。

1、设定(Settings)


设定里有以下内容:
名字(Name):房间在游戏工程里的名字,写代码时用以区分不同的房间。
房间名字(Caption):房间在实际游戏里的名字,游戏运行到这个房间时,显示在游戏窗口的标题栏的内容,即显示在下图位置。一般通过函数给游戏添加标题,所以不用填这个。

宽(Width)高(Height):此房间的大小,单位是像素(px),游戏窗口会自动适应房间大小。
速度(Steps per second):该房间的运行速度,单位是步/秒(或帧/秒)。这个值决定了该房间的帧率,帧率越高越流畅,同时代码的运行频率也更高,故一般帧率在30~60适中,且一个游戏应保持帧率始终固定。
保持(Persistant):如果你勾选了这个选项,当你离开这个房间时,房间内的所有对象的状态都会被记忆,之后你再返回这个房间时,会接着离开时的状态继续运行。
RCC(Room's Creation Code):写入RCC里的代码将会在进入房间的那一步执行一次,优先级高于Objects的事件。

2、背景图片(Backgrounds)


背景图片是整个房间里深度最大的图片。
你可以添加最多8种不同的背景方案(Background0~Background7),你应当给其中一种勾选上“当房间开始时可见”,其他的不勾选。之后可以用代码来切换背景方案。
如果你使用纯色背景,可以勾选“使用背景颜色”,然后在该选项右下方的“颜色”选择背景颜色。
如果你使用背景图片,“前景图片”选项的下方有一个框,可以选择一个背景图片。注:“前景图片”一般不会勾选,因为会让背景图片变成深度最浅的图片,会遮挡住你所有的其他图片。前景图片一般多使用半透明的图片。
水平贴图(Horizontal position)垂直贴图(Vitical position):单位为像素(px),将你的背景图片向右或向下移动一定像素。填负数则向左或向上移动。
注意:GM8里的坐标系与常规数学坐标系不同,它是以左上角为原点,向右为x轴正方向,向下为y轴正方向。角度则与常规数学相同,向右为0°,向上为90°,向左为180°,向下为270°。
延伸(Stretch):如果你的背景图片大小和房间大小不一致,可以通过勾选延伸使背景图片伸缩到房间大小。
水平速度(Horizontal rolling speed)垂直速度(Vitical rolling speed):如果你的背景图片左右可以连接,或者上下可以连接,你可以给定一个水平速度或垂直速度,背景图片就会运动起来。

3、视野(Views)


一般而言,游戏运行时,整个房间都会被展现出来,房间有多大,窗口就有多大。
然而有时候你并不想要这样,这时候你就要用到视野。
使用视野,你需要勾选“激活视野使用”。与背景图片相同,你需要给其中一个视野方案勾选“当房间开始时可见”,其它不勾选,之后可以通过代码来改变视野方案。
房间视野指的是以(X,Y)为左上角坐标,以W为宽度,以H为高度的那一部分房间。
屏幕输出指的是将房间视野拉伸到宽为W,高为H的大小,再把它放到放在窗口的(X,Y)位置。(窗口也以左上角为(0,0))
视野跟随:即房间视野始终跟随房间内某一个对象,而不是固定不动。Hbor指当该对象离视野的左右边缘还有多少像素时开始跟随,Vbor同理。Hsp指视野在跟随对象时的水平最大移动速度,单位是像素/步,Vsp则指垂直最大移动速度。一般Hsp和Vsp要大于跟随对象的速度。

4、贴图(Tiles)

贴图的使用因人而异,有人喜欢用贴图,而有人则从不使用贴图。
贴图使用的也是背景图片,与背景图片不同的是,背景图片的深度最高,不可逾越,而贴图深度为1000000,并不是一个不可逾越的值,你可以给对象一个更大的深度(如1000050)让这个对象被贴图遮挡。
背景图片(Backgrounds)的设置中你可以将背景图片分解为很多小贴图(当然你也可以不勾选,将整个背景图片当做贴图使用),如图:

你在房间内选择该背景图片作为贴图时,就可以单独使用每一个小贴图:

注意左下方的“删除底层”,指的是当两个贴图/对象重叠时是否删去之前放置的贴图/对象。

GM的房间操作:
上方属性栏中的SnapX和SnapY:网格大小,单位是像素,可以看到房间被黑色的线分为一个个区域,放置贴图/对象时,会强制对齐网格。
SnapX和SnapY右边的两个按钮,分别是显示/隐藏网格(网格依然存在)、是否使用斜网格。

鼠标左键:在该位置创建贴图/对象,按住左键不松,贴图/对象会自动跟随鼠标
鼠标右键:删除鼠标位置的贴图/对象,一直按住鼠标右键移动鼠标,所有经过的贴图/对象都会被删除
shift+鼠标左键:按住不松,将会为鼠标经过的每一个网格都放置一个贴图/对象
ctrl+鼠标左键:移动贴图/对象
alt+鼠标左键:无视网格地创建贴图、对象
ctrl+alt+鼠标左键:无视网格地移动贴图/对象
ctrl+鼠标右键:显示一些可执行的操作
其中Delete All指删除当前位置的所有贴图/对象,而不是指整个房间的所有贴图/对象。
Snap to Grid指对齐到网格。
Locked即锁定,锁定后不能被删除,不能被移动。

5、对象(Objects)

将对象放到房间内的操作和贴图(Tiles)同理。
注意对象对齐网格(Snap)时,是以自身精灵(Sprite)的原点为中心对齐的。
在对象上ctrl+左键出现下面的菜单:
Send to Back:如果该位置有两者以上的相同深度的对象重叠,该选项可以令当前对象置于底层,被其他对象覆盖,Bring to Front则相反。
CC(Creation Code):对象被创建时仅执行一次的代码。优先级低于RCC,高于对象的create事件。

6、扩展:对象(Objects)与实例(Instance)

对象指的是在Objects目录下的一种资源文件,而实例是指对象在游戏(房间)中的具体体现。
比如说,你在Objects目录下创建了一个对象,命名为snow,然后你在某个房间内放置了4个snow,或者用代码在游戏运行时创建了四个snow,那么这四个snow都是单独的实例,即它们是四个不同的实例,但这四个实例是同一个对象的实例。
当使用代码对"snow"发出指令时,四个snow实例都会执行这个指令。每一个snow实例都有一个独一无二的索引(ID,Index),如果你对某一个特定的索引(ID)发出指令,只有这个索引(ID)对应的那个snow才会执行指令,其余三个snow则不受影响。
在GML中,对实例操作的函数以instance_作为前缀,对对象操作的函数以object_作为前缀。(函数将在第六章讲解)