《gamemaker打砖块教程》由会员分享,可在线阅读,更多相关《gamemaker打砖块教程(18页珍藏版)》请在金锄头文库上搜索。
1、教程页 1 of 13引言欢迎来到 Gamemaker!本教程将告诉你如何使用游戏制作语言(GML )创建你的第一个游戏,将需要大约 30 分钟完成。我们希望它会教你用 Gamemaker 进行工作的重要基础,以及给你的游戏实验的基础和不断提高的同时学习所有关于这个难以置信的编程工具。 既然这是一个教程,我们准备重制一个每个人都知道的经典街机游戏打砖块! 学习完本教程结束时,您将创建一个玩家控制的球拍,一个弹跳球,砖,墙,和一些其他的东西,所有这些都将学习 Gamamaker 如何工作,如何使用 GameMaker Language(GML)编码和(我们希望!)在这个过程中体会到乐趣! 你将要
2、开发的游戏会使用一些特殊的资源,我们已经为这个教程特别创建了资源。你只需在您的计算机上找到他们,请去 Gamemaker 屏幕的顶部菜单,并选择 Help 下拉菜单。你会看到一个选项标记 Open Project 在资源管理器。如果你选择了该项,那么标准文件浏览器将打开显示你的内容 Gamemaker 工程目录,你可以浏览“Assets” 子目录,所有的资源都存储在“Graphics”(图片)和 “Sounds”(声音)文件夹下。 同时还建议你打开帮助手册(按 F1 来对开) ,这样你就可以阅读教程中使用的函数的一些具体细节。 单击 Next 按钮进入教程的下一页。 教程页 2 of 13添加
3、一些精灵像前面介绍的,我们想复制一个打砖块游戏,所以让我们来创建一些游戏中要用到的基础的对象。首先我们需要为游戏中的砖块添加精灵,所以右击资源树精灵文件夹,选择第一个选项“Create Sprite ”(创建精灵)现在你可以命名你的精灵,使它可以明确说明是一个砖块的精灵,我建议使用“spr_brick”(前置是资源类型,帮助你在以后的大型游戏中非常容易使用) ,现在点击按钮“Load sprite”,然后浏览到这个教程的资源文件夹(如果你不确认在哪里可以找到,你可以点帮助菜单,并选择“用资源管理器打开工程” )既然你将浏览助手,然后你可以选择砖块精灵资源了。这里面有几个关于精灵资源的不同的属性
4、,但是现在我们只需要指定它的 origin(中心) ,这指定它的 X 与 Y 位置,这将用于在游戏房间定位一个实例,可以看作是它的原点,这也用于转动与缩放于其他用途,现在我们只需要指定砖块中心即可,点击按钮(Center)你将会看到指定的 origin 跑到了精灵图的中心。现在,我们的精灵砖块就做好了,接下来创建玩家球拍精灵。但是这次我们采用不同的方法,你可以看到另外的设置,导入助手。下面的文字,你将会看到我们这次将要用到的精灵。只需要将图片拖到主界面区域并松开鼠标。这时你会看到一个对话框打开了,并问你你想要导入的资源类型(你应该选择 sprite) ,然后就会创建一个新的精灵。使用该方法你可
5、以快速简单地创建精灵、背景,只需要把它们拖进 GM 窗口中即可,现在可以为新的精灵命名了,例如叫作:spr_bat。然后指定它的原点为中心点。接下来,同样创建俩精灵,一个是墙精灵,一个是球精灵。用你想要的名字命名它们,然后关闭墙精灵,我们不用管它,但是对于球精灵,我们要多做一点事。第一件事就是指定中心为原点,第二你需要到标记为 Collision Checking(碰撞检测)的界面,然后点击按钮(Modify Mask 调整碰撞盒) ,在这里我们将调整碰撞盒(在 GM 中用于碰撞的区域) ,这里我们将其指定为一个椭圆,这样它就只覆盖球自己,要做到这个只需要简单的点击按钮 ellipse 在这个
6、形状小节,像下面这样:关于碰撞盒属性的更多信息,访问手册中的高级使用下的关于精灵更多内容一节。设置完成之后,关闭碰撞盒属性窗口与精灵属性窗口,保存一下你的游戏。下一节我们将继续。点击 Next 进入下一章节。教程页 3 of 13创建一个墙对象现在我们有了游戏的基础精灵素材了。现在我们开始来创建对象。一个对象是所有实例的基础类,而一个实现是直接显示在 GM 的房间中的。这意味着你可以有一个对象,但该对象可以有多个实例,而每个实例都有着同样的对象的同样属性。但是(既然它们是互相依靠的)它们可以被改变,也可以操作的互相独立的。好了,下面我们来创建我们的墙对象。像创建精灵一样,右击资源树上的对象文件
7、夹,点击创建对象(create object)设置。现在给你的对象一个名字(例如:obj_wall) ,然后点击相关精灵图标,选定我们前面创建的墙精灵。墙的实例将会被用来创建游戏区域的边界,它们用于停止玩家的球拍,防止它移动到房间外面,然后还要用于碰撞球,而使球总是在房间里面(除非球从球拍下离开了) ,但是我们还要使它不可见,所以它不能被玩家看到有实际的墙,这样房间看起来好看一些。要让墙对象不可见,我们需要不选中对象 visible(可见)选项。一个不可见的对象仍然会执行碰撞,并且像其他可见对象一样运行其中的代码,只是它不再执行 draw event(绘制事件)中的所有内容。所以在其中写代码也
8、不执行,拖拉进去的东西也不行。在继续下一章之间保存你的游戏。点击 Next 查看下一章。教程页 4 of 13创建一个砖对象外墙对象创建好了。砖对象的作用是让球碰撞它,并且会被球撞坏。像前面创建墙对象一们,下面我们创建一个砖对象。右击资源树下的对象文件夹,点击创建精灵设置。现在给你的对象起个名字(例如:obj_brick) ,然后点击绑定精灵图标,指定为砖块精灵。一个新的按钮现在出现在精灵名字下面,叫作 Edit,这将会打开精灵属性窗口,所以点它,现在是我们精灵图中的更多的子精灵。现在我们打开属性窗口,点击 Edit(编辑精灵)按钮打开精灵编辑器,然后你可以看到一个新的窗口,它显示砖块精灵有很
9、多子精灵。这个数值就是 image index(图像索引) ,你看,每个精灵都可以有一个变量:sub-images,它使精灵可选。这个子精灵可以显示一个接一个,这样就可以创建动画精灵,或者它们能被在不同状态(比如一个按钮未按时,按下时,抬起,放下等,所有的状态都有两个不同的子精灵)时被显示。选择子精灵 0,点击它,然后点击 copy 复制按钮,然后点击 paste 粘贴按钮,就添加了一个子精灵图。现在双击子精灵图 1,打开编辑器,我们现在可以改变它的显示效果。我们现在为它指定不同的颜色,只改变它的颜色,这样使我们游戏中的砖块更加丰富多彩,要做到这样,去这个 Image 拖下拉菜单,选择 col
10、orize(颜色) ,它将会打开另外一个窗口,在这里,你可以改变子图像的颜色。既然你对结果满意了,点击 OK 按钮,然后就保存有了新的颜色的子精灵图(拉动绿的拉杆颜色就会变动) 。现在重复上面的操作,直到你有至少 4 个不同颜色的子精灵图。当你有了不同子图像的砖块精灵,关闭精灵编辑器,并返回砖块对象。我们现在来告诉GM,不要用动画来展示精灵,而只是随机显示子精灵。添加一个 create event(创建事件) ,然后拖进去一个代码动作(控制面板下的代码)到里面。这将会打开代码编辑器,这里你需要输入以下代码:代码的第一部分设置 image_speed(图像速度)为 0 这个速度用于显示精灵图不同
11、子图像的速度,默认值为 1,即每帧显示一个。将其设置为 0,就是告诉 GM,不用动画显示精灵图,只是显示子精灵。第二行是一个随机选择子图像。就是在创建时,选择不同的颜色。保存你的游戏。点击 Next 进入下一章。教程页 5 of 13创建球拍对象一个碰球游戏需要一个玩家控制的球拍移动碰一个球来撞击并破坏砖块,让我们开始球拍对象。像前面一个创建一个新的对象,绑定球拍精灵图,并为它起一个名称(obj_bat) 。现在我们将要添加移动操作为对象的键盘事件。要开始这个,我们将使用方向键,来添加一个keyboard event(键盘事件) ,并在上下文菜单中选择第一个设置 Left(左键) 。这样就添加
12、了一个左方向键事件,有三种不同的键盘事件分别是 Pressed(按下)released(抬起事件)只在键盘被按下或抬起时执行一次,但 keyboard eveny(键盘事件)是在键盘按下时持续执行,所以一些代码将会被一步都被执行在键盘持续按下时。拖一个代码动作到新的事件中,并添加以下代码:代码的第一部分是检查球拍左方是否有跟墙的碰撞,如果没有的话,就将球拍向左移动 5个像素。接下来创建右方向键动作,添加以下代码:可以看到这个代码跟上面的那个比较类似,只是现在检查的是右方。 (记信在 GM 中位置是被用于在房间中的 x 值与 y 值定义,0,0 指定为左上角)所以+x 是向右,-x 是向左,+y
13、 是向下,-y 是向上。最后,我们再添加一些控制代码为开始游戏为球对象(球的对象我们将在下一节创建) 。由于我们需要也指定另外一个键盘事件空格键,我们将添加下面代码:这个代码看起来更复杂,但是也很简单,它说所有的球对象,如果它的变量 go 是假的,就将它设置为真,并给球一个速度,每帧 5 像素,和一个随机的方向,方向范围为 45135之间。这个 with 函数是非常强大的,它允许你运行其他对象中的代码块,你也可以看到在上面,我们在游戏开始是使用了发射球对象。点击 Next 进入下一章。教程页 6 of 13创建球对象最后也是最复杂的,我们需要制作的对象是球对象,像前面介绍的一样,先创建一个对象
14、,并为其绑定精灵图。在开始的时候,我们需要为对象的 create event(创建事件)添加以下代码:这是控制变量,指定玩家在游戏开始是发射球,现在添加一个步事件(step event)并给它添加如下代码:这个代码将会检查控制变量它的值是否为假,如果为假,它将使球的横坐标跟随球拍的横坐标。如果 go 的值为真,则判断,如果 Y 坐标大于房间高度即球跑到房间外,将使游戏重新启动。注意:我们能使用 with 函数在代码的第一部分,但是在这情况下,更简单的获取球拍的 x坐标是用对象的索引加一个点来直接使用它。这种方法是好的,但是也是有限制的,如果房间中没有对象而直接引用就会提示错误(但 with 结
15、构就不会) ,但现在并没有问题,因为我们知道,房间中肯定会有球拍对象,另外这种方法也仅限于房间中只有一个对象的实例的情况(而 with 结构会指代所有的实例) 。最后的事情就是为实例添加碰撞事件,先添加球与墙的碰撞事件。拖一个代码到事件中,添加如下代码:这告诉球弹离墙,当它与墙发生碰撞时。我们已经设置碰撞为精确的,来使它看起来更真实,注意,并不建议所有时间都设置精确碰撞,因为这样会占用更多内存。但是现在只这个实例是,并不会有什么问题。下一个要设置的是球与砖块实例的碰撞,添加一个碰撞事件,然后拖进下面的代码:像前面一样,球会从砖上弹开,同时我们使用了 with 结构来告诉 GM 在碰撞发生时来销
16、毁砖块实例,怎么样使用特别的关键字 other,在碰撞事件发生时 other 关键字总是指代另一个对象,所以当使用 with(other)代码结构,你实际上是在说:执行这个代码在与球相对应的其他实例中。在很多情况下,这种结构非常有用。最后的碰撞事件需要添加的是球与玩家球拍的碰撞,所以这次再添加一个与球拍对象的碰撞事件,并添加如下代码:上面的代码是一样的,但是下面的代码是怎么回事?好的,在反弹,这个球与球拍碰撞的位置将影响到弹开的方向,所以首先,我们像通常一样计算反弹,然后,我们通过球拍的位置获取反弹的角度(碰撞发生时 other 的角度) ,和这个球对象他自己。这个角度也用于motion_add()函数来为球添加角度,我们设置速度为 5,因为 motion_add 也会影响速度,因为我们不想这样,所以用 speed=5 来限制它。现在我们几乎准备来第一次测试我们的游戏了,但首先我们还需要 一个房间来玩这个游戏。保存一下你的游戏,继续下一部分。点击 next 查看教程下一页。教程页 7 of 13