为了正常的体验网站,请在浏览器设置里面开启Javascript功能!

gamemaker-1945飞行射击游戏制作

2011-11-13 25页 doc 2MB 70阅读

用户头像

is_847876

暂无简介

举报
gamemaker-1945飞行射击游戏制作 教程: 卷轴式射击游戏制作 版权: 2005-2006, 游戏制作者 最后编辑: 2月10日, 2006 使用: version 6.0,高级模式 等级: 初学者 翻译:Qiou 月光下的魔术师 卷轴式游戏是一种非常流行的动作游戏, 用Game Make很容易就能作出来。在这个教程里我们会用到和学到Game Maker的一些知识,尤其是变量的使用。在卷轴式游戏里玩家控制一个物体(Object),一架飞机,一艘飞船或一辆汽车在背景穿梭,在背景里...
gamemaker-1945飞行射击游戏制作
教程: 卷轴式射击游戏制作 版权: 2005-2006, 游戏制作者 最后编辑: 2月10日, 2006 使用: version 6.0,高级模式 等级: 初学者 翻译:Qiou 月光下的魔术师 卷轴式游戏是一种非常流行的动作游戏, 用Game Make很容易就能作出来。在这个教程里我们会用到和学到Game Maker的一些知识,尤其是变量的使用。在卷轴式游戏里玩家控制一个物体(Object),一架飞机,一艘飞船或一辆汽车在背景穿梭,在背景里出现的障碍物必须要躲避,敌人一定要射击。难度会越来越高,玩家要想方设法地生存下来。(下面都是一些废话) In this tutorial we will create a scrolling shooter called 1945, in which the player flies in a plane over a sea and enemy planes try to destroy the player. We will treat aspects like how to create the illusion of motion using a scrolling background, how to control the plane, how to make enemies and bullets, and how to deal with the score, with lives and with the damage of the plane. But first of all we delve into a very important aspect of Game Maker that extends the possibilities considerably: the use of variables. 变量和属性介绍 在开始这篇教程之前我们先介绍一下GM一个重要的概念:variable(变量)它最好理解成一个物体的一个实例的属性。当我们定义一个物体(object)时,会用到好多特定的属性,比如我们设置一个物体是否可见,是否是固态,还有许多动作(action)能改变这些属性值,比如改变位置啦,改变实例的速度等。每个实例都有自己的属性,还有一些全局属性,比如分数,与哪个实例都没直接关系,这些属性都以自己的名字以所谓的变量形式被游戏保存起来。下面是游戏要用到的一些公用变量/属性,你可以在任何地方引用它们。: x – 实例的X坐标 y -实例的Y坐标 hspeed :水平方向的速度 (in 像素 per step) vspeed :垂直方向的速度 (in pixels per step) direction :当前运动的方向,用角度表示。 (0-360; 0 是向右的水平) speed :当前方向的速度。 visible 物体是否可见 (1) or 不可见 (0) solid 物体是否实心(1) or 不实心 (0) And 这儿是一些全局变量 variables: Score:分数 lives :生命 mouse_x 鼠标的X坐标 mouse_y 鼠标的Y坐标 room_speed 场景当前运行的速度。 room_caption 场景显示在窗口的标题 room_width width of the room in pixels room_height height of the room in pixels Game Maker文档里随处可见一些实例的局部和全局变量。有一些动作可以操纵这些变量值。但是,我们也可以直接操纵这些变量值。更好的是,我们可以定义自己的变量,使用它们。比如,下面我们将看到的,我们想让我们的飞船一次只能Shoot一次每5步在游戏里。所以我们的飞机需要一个属性指示它是否能射击。我们将这个属性变量称之为can_shoot. (A variable name can only consist of letters and the underscore symbol. Variable name are case-sensitive, so Can_Shoot is not the same variable as can_shoot.) 在创造飞船事件中我们将它设为1.(1等价为true.) 当玩家想开火时我们检查它是否为1.一旦开火后立即设它为0(暂时不允许再射击。) 然后我们再使用一个时钟报警事件重新设它为一,在5步之后。下面我们将详述之,同理我们可以使用变量让飞机设为是否在保护状态,是否可以进行武器升级,等等。 有两个重要的可以直接处理变量的动作。 Set the value of a variable设置变量值。 用这个动作我们可以改变给定变量的值。.你也可以用它定义自己的变量名和初值。 当你勾选 Relative 复选框 给定值会加在当前变量值上。注意这只能是当前变量已经有值分配的情况下。 Rather than providing a simple value for the variable you can also give an expression. 例如,你想将你的分数加倍,你可以将score值设为:2*score. If a variable has a 如果值是…… 用这个运作你可以检查给定变量的值是什么。如果变量值等于你指定的数值,则反回true.并且下个动作模块会被执行;否则下个动作模块不会被执行。你也可以检查变量值小于可大于你指定的数值。你甚至可以随心所欲使用各种表达式。 下面我们会给出一些例子说明它们的用法。 还有一些有关变量的内容你要了解的。刚才我所说的那些局部变量是“属于”实例本身的。还有一些全局变量也是如此。当你定义使用你自己的变量时那只是一些局部变量,它依附于实例和那些特定动作上。如果你想用你自己的全部变量,你必须重新修正名字,在它前面加个“global.”例如,你可以用一个变量global.bonus 指示搜集玩家的奖赏分数。小心不要让变量名与其它已经存在的图例,声音名重复。一个方法是总是让你的变量以 var开头。_. 1945 让我们看看我们将要制作的游戏吧,作一个游戏之前先要作一个设计文档。 1945 design document Description In this game you control a plane flying over a sea. You encounter an increasing number of enemy planes that try to destroy you. You should avoid these or shoot them. The goal is to stay alive as long as you can and to destroy as many enemy planes as you can. Game objects 游戏背景是由海面和小岛组成,还有玩家的飞机。敌人有四种类型的飞机。 over this sea. You can shoot bullets that destroy enemy planes. There are four types of enemy planes: a plane that you encounter and should be destroyed, a plane that fires bullets downwards, a plane that fires bullets towards the player’s plane, and a fast enemy plane that comes from behind rather than from the front. Sounds There are some explosion sounds and there is some background music. Controls The player controls the game with the arrow keys. With the space key you fire a bullet. Only one bullet can be fired every five steps. Game flow The player immediately jumps into the game. The player has three lives. When all lives are gone a high-score table is shown. Pressing the (help) key will give a brief explanation. Pressing the key will end the game. Levels There is just one level, but more and more enemy planes will arrive: first only the easy type but later the more difficult types. 玩家控你的黄色飞机飞过天空。四种类型的敌机会以图形显示。在底部有分数,生命数还有你的损坏量。 The illusion of motion A scrolling shooter thanks its name to the fact that the game world scrolls over the screen, normally either from top to bottom or from right to left. This gives the illusion of motion. In the game 1945 the game world scrolls vertically. Even though the plane the player controls actually stands still on the screen you get the impression as if it flies over the scrolling background. You can control the position of the plane by moving it around on the screen. This gives the impression of the plane speeding up, when it moves forwards, or slowing down when it moves backwards. It is crucial that the plane does not move faster backwards than the background scrolls. This would give the illusion that the plane flies backwards, which is of course impossible. 我们怎么样才能作出这样的背景?有两种方法,一种是你用现成的素材, 另一种,更复杂的是你创造一个更大的room,但它也只是显示整个room的一部分,我们称为“view”这个view慢慢地向上推进,下面我们将向第二种方法介绍。 我们的游戏发生在海上我们要用一个背景图片看起来向从上往下看的海面。我们添加下面这个小图片作为背景素材,称它为” back_water:” 用它填满背景使它看起来更像海。为了作出一个能动的背景,再用类似的方法增加一个room 。 点击左边的backgrounds标签 .我们要改变三个设置。首先,由于我们是用背景图像填满整个room而不是用一种颜色填,所以取消Draw background color.勾选。 第二,在中间部位我们在菜单图标上选择 back_water 背景图案 默认的设置是用它填满整个room这正是我们想要的。最后,我们要让背景能动。 为了达到这个目的,在底部,设置 Vert. speed 为2,整个表单应该像下面这样设置。: 运行游戏来验证结果吧。 为了加强动感我们需要加一些小岛。一种方法是创造一个更大背景图案,把这些小岛加进去。这种方法不好,工作量太大。 玩家发现这些小岛都是重复的,所以我们用实例的方法把这些岛加进去。我们必须先作出下面三个图例(sprites): 我们不会对它们作冲突检查,你最好将 Precise collision checking复选框去掉。每个岛我们都会创造一个object。在creation event 我们给object一个垂直速度与背景卷动的速度相同。为了使别的object能在岛之上我们给岛这个object一个Depth of 10000. (你必须以高级模式下运行Game Maker才能达到这个目的!)实例的object用这个深度来画使它们看起来处于下方。 深度值最大的实例最先被画。深度值小一点被画在深度大的实例上方。 还有一件事,当岛从room底部消失后我们想让它在顶部重新出现,为了达到这个目的,在岛的Step event里我们要验证岛是否从屏幕下方消失,来让它从顶部出现。注意y变量是表示物体垂直坐标。(相对于room顶部来说的。) room_height的高度。. 所以当y>room height时小岛会从room底部消失。这样我们就可以用action来验证变量值看是否岛在room之下。 从下面你将看到,你可以用别的变量名,你也可以用整个表达式。 为了到room顶部我们使用了 the action of jump to a position.但是我们更喜欢跳到room的一个随机的位置这样岛看起来更无规律性。但是我们怎么作到给出一个随机数呢?我们用函数random(). 它是计算出一个值, (或执行一个动作)基于一个给定的参数值。 参数写在括号里面表达式,函数,变量也可以, Game Maker里有很多函数。.我们现在用random(room_width) 作为岛的x坐标。既在0和room宽度之间产生一个随机数。如下所示。 我们用–65 作为y-position 是为了让岛完全在room的上面开始出现。 我们必须对三个岛物体都要作这些.使岛在room的不同高度错落有致地出现,我们还要对卷轴背景使用,既使岛在规则的时间重新出现,因为位置不同,玩家这样不会注意到它们是相同的,你最好也要在岛出现时在Y坐标上加一些负的随机值。 The main plane 现在背景已经作好我们要作玩家控制的主角飞机。开始我们要一个飞机sprite.我们要用这一组图片,看起来飞机在制动。 propellers : 当我们作这组图片时我们要有一件很重要的事,我们要将起始的X and Y 设为32. 意思是起始的图像是以飞机为中心的, 而不是以左顶部为基准。这是设初值的常识。这对于子弹从飞机中心发出效果很重要。而不是让它从左边发射出。. 接着我们加入一个 object: obj_myplane. sprite 就是我们刚才作出的plane sprite。我们给它一个深度depth值 –100 确认它在子弹,还有其他别的物体之下,我们会在后边创造. (合理使用depth 属性 对很多游戏来说是一种很重要有效的方法,. 你要好好理解使用它.) 在一个时刻我们只需要判断飞机是否在动,当玩家不作任何操作时,飞机是不动的, (记住,是背景不停地在动,不是飞机.)当玩家按了四个之一的方向键时,飞机应该在一个恰当的方向移动, 我们主机关心的是避免让飞机移出room之外,所以我们要控制运动本身,而不是给飞机一个速度,下面我们将要介绍。 让我们看看左方向key的运动,增加一个keyboard event of the key. 我们首先要检查的是飞机是不是飞的太左了,所以我们用一个action 来检查变量 x 是不是大于40, 类似地方法我们检查y坐标,对岛的处理也是如此,如果反回是真我们想让飞机向左相对于当前位置挪动一个小的位移,为此我们使用“jump to a position” action 来移动 相对 –4 的 x 值和 0的 y值. 别忘了勾上Relative .复选框,对于右方向我们作类似的处理,我们检查x是不是小于room_width-40 ,并且,如果是,就跳到相对于x是-4,y是0的位置,类似地对垂直运动也作同样处理,但是这次我们让飞机的速度变小,既speed-2 (记住,我们永远不能让飞机向后的速度超过背景卷轴的前进的速度,)同时,别忘了正向y方向在减小,所以我们必须在之后让y-position减2.So to move upwards we must subtract 2 from the y-position. 在屏幕底部我们要放一个大于120边框的的屏幕,它将用来放一些以后要用到的显示游戏作息的面板。 好了,我们的飞机能飞了,运行游戏,看看效果吧。 Enemy and weapon 但一个射击游戏怎么能没有武器和敌人呢? 我们现在将扩展我们的游戏用一些敌机和飞机上的一个你能开火的加农炮. 我们开始制作加农炮,我们要用一个子弹sprite.我们将它置于中心,. (你也能在子弹图像右边适当的位置点击一下达到此目的) 我们为这个子弹创造一个object.我们设它的默认depth为0使它看起来在飞机下面但在岛上面。在creation event我们给它一个vertical speed (垂直速度)of –8 使它向上运动。我们还要毁掉它当它一旦离开room时。这个很容易办到。在step event 我们验证变量X是否小于-16. 如果我们要毁掉object我们要用适当的event(事件) (你也可以用Outside room event 它能在别的事件里被找到) 当玩家按space键时,子弹会发出.在大多数射击游戏里飞机会一直开火,只要键一直按着。但是我们不想一个时刻有太多的子弹。这会使游戏变得很容易。 我们只允许一秒内发两发子弹,既,每15步发一发子弹。所以我们用一个变量can_shoot 就是我们刚刚在上面提到的。在主飞机的creation event 我们设它为1, 表示我们能发射1发子弹。在space key event我们验证can_shoot 是否等于1. 如果是我们在船前在创造一发子弹,相对位置为 (0,-16).然后我们设 can_shoot 为 0 表示我们不能再发子弹了,并且设alarm 0 to 15. 记住alarm 每一step(步)减少一个当它从15减到0时alarm event (警报事件)发生。在这个alarm event里我们设Can_shoot 为 1,表示我们又能发射子弹了。如下图所示。 你也可以改变alarm的值改变子弹发射的频率。 现在我们开始作第一种敌人飞机。它是一种小号飞机并且向下飞。它不发射子弹但它一旦碰到主角飞机游戏就会结束。.我们用上面方法作一个敌机的sprite and an object. 在creation event我们设 vertical speed 为 4 飞机向下飞,当它到ROOM底部时我们设它重新出现在ROOM顶部的任一个位置。就用刚才岛的方法。 我们要定义敌机的2个重要的collision event(碰撞事件) 有关子弹的。一是能干掉敌机,还有这个有关主角飞机的collision event 也能使我们的主角飞机挂掉。 我们现在开始子弹的碰撞事件。这儿需要有一系列动作. 首先我们需要一个爆炸的声音还有一个小的爆炸sprite(图例)表示爆炸影像。我们按 Add sound产生声音 并加载一个好听点的爆炸声音。. 我们要作一个爆炸sprite,设 origin to (16,16). 我们也要作一个爆炸object(实体) 给它赋与一些 sprite. 它除了爆炸动画发生之后毁掉自己外什么也不作。有一个事件叫Animation end 专门作这个事under the other events. 当爆炸的声音和OBJECT完成后我们要放在敌机碰上子弹的爆炸事件里。 下面需要一些动作,首先我们要播放动画声音,接着毁掉子弹, 为了这些我们要用一个毁掉实例(instance)的动作(ACTION)at the top, indicate that it should apply to the Other instance, which is the bullet in this case. 接着我们创作一个explosion object, 相对位置为 (0,0),那与敌机的位置相同,但是我们现在不能毁掉敌机。相反的我们要把它挪到ROOM里一个随机的位置好像一个新敌机又来了。最后我们设SCORE相对为5,既加5分。 整事件像下图所示。 下面我们要处理主角飞机的碰撞事件了, 首先我们需要一个 explosion sprite (稍稍大一点的,主角要挂的壮烈点嘛!) 和一个爆炸声音(稍稍响一点). 类似地我们创作一个爆炸OBJECT加入声音, 但这个爆炸事件要处理的更精细一些因为它与GAME OVER有关。在它的Animation end event 我们作一些小手脚。首先我们毁掉第一个instance(实例)让它看不见. 接着我们等一会儿确保爆炸声音已经结束。下面一个动作是显示出高分榜。玩家可以打出自己的名字在榜上, 这在 Game Maker都是自己完成的。你可以准备一个很漂亮的图片和字体等等。this. Finally we restart the So the event looks like this(事件看起来如下): 在整个爆炸事件里,我们先是改变事例,把主角飞机变为爆炸INSTANCE,再播放声音和动画,接着摧毁自己。 一个好的游戏难度不是一成不变的,开始时ROOM里只有一个敌机,到后来我们想让敌机越来越多。为了作到这些我们再作一个object,叫作controller_enemy. 它能控制敌机的多少,能“造出”敌机来。我们在整个游戏中让这个object不可见,通过取消勾选复选框Visible. 一个sprite也不需要,在它的creation event 我们在ROOM上随机放一个敌机的位置。它将是第一个敌机,我们还要设. alarm clock为 200. 在这个alarm clock 我们创造另外一个敌机并且重设alarm clock, 但这次设为 500. 这样作的效果是,在游戏开始时,有一架飞机,过了200 steps,大约是7秒,at 第二架敌机出现了,进了大约15秒,第三架出现了,把这个 controller 部件(object)的一个实例放在ROOM的一个地方。我们就完成了。. 这样1945的第二个版本就完成了,我们可以有一个可以玩的游戏了。 分数,生命值和血量 游戏有一个不好的地方就是只要你挨一下你的飞机就挂掉,我们加一个血量和多几条命。这里我们再作一个漂亮的显示上面这些信息的面板。 这些能在 1945_3.gm6.里找到 我们先作一个新的object叫controller_life.它不需要一个图例, 我们会控制让它自己画出,通过使用drawing event. 正如你所知,在sprite的每一step它都会设一个例子(instance), 在房间里正确的位置重画。. But when you put actions in the drawing event this is no longer the case. 现在这些事件决定你要画什么,有一个绘画事件收集,. 大多数可在Draw tab里找到。.但你也能用别的绘画动作, 这些只有在绘画事件里才有效。 在别的地方它们完全被忽视。 开始我们作一个大点的信息面板图例,看起来像下面那样。 它会显示分数,血量,和生命数, 在controller_life 的绘画事件里,我们用动作(action)将这些信息画在信息面板的适当的地方。参数设置如下。 它会把正确的sprite放在屏幕底部. (用 –1在subimage上 当前的子图(SUBimage)被画了。.这里仅有一个subimage在 sprite 里我们不必关心它,但是如果sprite有多个子图, 你可以指出哪个子图被画。 为了确保信息面板在任何物体之上我们为controller_life object设一个depth of –10000. 在它的 creation event, controller_life object 设分数为 0,生命数为 3, 血量为100. 在Score tab 里有一些动作,为了画出分数我们用恰当的action 在 Score tab. (开始设绘画颜色为黄色) 在画分数的动作中,我们像下面设置参数。 (no caption because the caption is already on the background): 为了画出生命数我们用一种别的机制。 我们更喜欢用一些小飞机图片表示余下的生命数,我们用一个小的sprite描绘飞机. 在 Score tab.如下所示 现在我们显示出了生命数和分数,我们不想让它在窗口标题里显示出来,在Score tab 要有一个动作指示哪些在窗口标题必须显示出来,把这些放在 object 的 creation event 里,指出什么也不要显示。 为了画出血量要有一上特别的动作,.血量用血槽显示.你能指出它的位置,大小,色彩样式等,如下。 整个绘画事件如下所示。 但实际上还是要检查血量和生命数,首先我们要在敌机和我机的collision event 作一些小小的改动。它不能摧毁我机,只是毁掉敌机自己(变成爆炸object), 减小血量值, 设血量为相对-30 (我机能承受 3 hits). controller_life object 要检查血量是否小于0. 有一个事件是作这个事,在别的事件之后,在这个事件我们炸掉我机把它变成一个大爆炸,如下所示。 大爆炸部件, 在它的 Animation End event 毁掉它自己,过一会儿,.让声音结束, 创作一个新的我机在当前位置。(既相对为 position (0,0) 减少生命数1个, set it relative to –1. 最后,我们要检查是否命已经死完了,幸运的是,已经有一个这样的事件作这些事了,在controller_life object里,可以显示出高分榜,重启游戏等, t More enemies 我们要增加三种新的敌机,一种是无目的地发子弹,还有一种是对着我机发子弹, 还有一种不会发子弹,但是它从ROOM底部来,我们会让它们在后面几个关中出现 . The new version can be found in the file 1945_4.gm6. 为了创作新的敌机我们必须创作新的sprite, 它们和第一种敌机类似但颜色不同,要用新的object, 因为它们的事件和动作不同,但大同小异,我们在第一种已经作好的敌机的OBJECT,复制一份, (右击选Duplicate ). 双击新复制的object来改它, 起个新名字和不同的子图,在子弹的collision event 我们改分数为 10. 为了让敌机能开火,我们要用一个子弹子图和子弹object.在它的creation event, 给它一个向下垂直的速度.在它的step event我们又要关心毁坏事件, 当它移动屏幕底部,在主机与子弹的碰撞事件里我们设 血量值相对减少即 -5, 毁掉子弹,并且放个声音。 我们必须不时地让敌机放子弹,我们在飞机的 step event 作这些。 We use the action to throw a dice and 参数我们设为 30. 表示下一个动作大约在每30步执行一次,在下个动作里我们再创作一个子弹。. 最后我们要确保在后面关中第二种飞机要出一,我们再次使用controller_enemy. 在 creation event我们设alarm从1TO 1000。 在这个 alarm event 我们创作第二个敌机,设alarm 由1 又回到 500 使再作另一个敌机。. 所以第一种类型的飞机会在大约30秒后出现,另处的又会在每15秒出现一次。 下一种类型的敌机我们又需要新的子图和新的子弹子图, 我们把第二种飞机作一个COPY。在子弹碰撞事件我们设分数增加为20。 . 我们也要创作第二个敌机子弹子图。. 敌机创作出新类型的子弹在它的 step event中。我们又用一个dice action 但是现在我们只是每80步作一个子弹。因为这种新子弹稍微有点难躲一点。 新子弹如下所示,在它的creation event 我们用action 让它移向一个固定位置。但是我们用哪个位置? 当然是射向主机啦,所以我们要知道object的X和Y值。我们用 obj_myplane.x 来指示我机的X坐标值,当这个部件(OBJECT)有许多实例(instance)时我们得到的是第一个实例的值。当没有这个部件的实例时反回出错。这是一个问题因为在游戏里当我们的主机被毁掉时可能暂时没有飞机了,所以最好我们先检查是否有飞机,有一个action 能算出一个指定object的instance数目。我们用它检查我机是否可用。如果我机尚存,让子弹直接飞向我机,否则子弹会向下飞,So the creation event will look as follows: 向某一点移动的action参数如下设置。 还要有一些改动.由于子弹能向任意方向飞,所以在step event里检查子弹是否飞出room之外是件困难的事情。但是实际上,有一种特别的事件:Outside Eventd。在这个事件里我们只要简单地放一个动作毁掉子弹就行了。 最后我们还要处理新型号敌机的产生事件(creation event)。正如前面我们看到的我们用了controller_enemy object。在 creation event 我们放了一个时钟(alarm)值从2 到 2000. 在这个 alarm 事件(event)我们产生了一个新型号的敌机并且再设alarm 从2到1000 使过些时间再产生出另外一架敌机。. 我们第三种敌机制作就完成了,它还是从第一种敌机中“复制”出来的,和第一种敌机制作方法差不多,只是它不是从上面出来而是从ROOM底部出来,并且向上飞而不是向下飞, controller_enemy object 创造出了它们,这次用了三个定时器,你现在应该明白怎么用它了。 1945第四版就算制作完成了,它已经非常好玩并且难度不低,来,向最高难度挑战吧,争取高分榜上榜上有名。highest score. 制作尾声 游戏制作已经差不多完成了,但是要它更像商业化游戏,还要一些背景音乐啦,启动LOGO啦,还有图标什么的,这些都能在游戏的最后版本文件 file 1945.gm6找到,我在这个游戏里还有当你达到400分有的奖励武器,达到1000分还有,你自己可以加强这个游戏的功能。附件里有好多图例。 使用时间轴 在这个章节和下个章节我们将讨论Game Maker 的更复杂的特性,这在游戏制作过程中会很有用。 上面的制作中,敌机的出现,产生是由 controller_enemy object 控制的,它们不时地出现,但是敌从来没有真正地摧毁过,他们只是又重新出现了而已。这样导致游戏越来越来难因为敌机数量越来越多,这虽符合难度要求但是有许多不合理的地方,首先, 敌机在随机位置出现这样使游戏制作者无法控制。这样会使敌机可能老是在边界地方出现,而且,敌机可能正对着你出现,玩家要作的仅仅是不停地按着子弹或避开它,其他什么也不用作。 为了使游戏变得更有趣游戏设计者要给与飞机的出现以更多的控制,何时,何地都要考虑。敌机要以一个阵型出现,给玩家以更大的挑战, 可能要有一大片敌机,并以一个历害的大飞机为首,这些能使游戏变得更有趣。 所以我们想更好地控制某种敌机的出现, 为了达到这个目的我们使用了时间线(time line)资源。但首先我们还要对游戏作些小小的改动。所有的敌机当它们被击中或飞出屏幕之外时我们不再让它重新出现。我们只是简单地毁掉它,用时间线来控制敌机的制作。(你可以在文件 1945_5.gm6找到这个设定,它不是一个完整的游戏,只能看个开头,你可以扩展它使它成为一个好玩的游戏。) 时间轴资源如下工作,在这里你可以定义一系列时刻(moment)以游戏的步数衡量。在某一时刻你可以指出那在动作在哪个时间段里一定要发生,在这个游戏里我们用时间轴控制敌机的出现其实你可以控制任何事件的发生。 从Add菜单中选择Add time line 。 一个类似于object的表单就会弹出来了。在左边我们会看到add, delete 和一些操纵时间动作的按钮。在中间你会看到一系列定义好的时刻(moment)接着选择某一时刻你会看到在那一时刻中会发生的事件。 在moment 0 我们想产生一架敌机。于是我们点击Add按钮。 值显示为0.这一时刻被加到列表里了。现在你可以拖动动作(action)到action 列表里。我们仅仅只需要加入一个动作在恰当的地方创造一个敌机。敌机会用100 steps穿过room, 我们用step 100.来加第二个moment 来创作两个敌机一个接一个地穿过天空。以此类推。通过在不同的高度我们可以创作出很漂亮的战斗布局。如下所示。 上图显示在moment 400我们作出了一排9架飞机,两个在发射子弹。 你会悟出来了,你可以不断地增加时刻来作出越来越多危险的飞机和越来越有趣的格局。这样可以作出有一定难度的游戏。在整个游戏里你可以使用不同的时间轴来作出不同等级难度的游戏。 在一系列时刻的结尾你可以增加一个时刻显示一些信息表示一关结束,最好有一个过关动画。比如一个航空母舰让我们的英雄飞机安全着陆。 我们还没有结束。一个时间轴不是自动执行事件的。你必须把时间轴安排到一个object上让它来执行事件。有两个特殊的action作这些事,一个是安排时间线到一个object上另一个是设置时间线的位置。 我们又要使用controller_enemy object. 它仅仅在 creation event 安排一个动作来设置time line. 你会注意到,使用时间轴你要作很多事情,但是它给游戏许多弹性,使游戏更有趣。. 你可以用时间轴作很多事情,你可以用它控制物体本身,在时间轴上有很多小技巧。比如,让时间轴循环,在结尾处加一个动作使时间轴位置反回到0.。或者让时间轴停住一会儿,以便加一个动作测试环境。你也可以让时间轴位置为相对(relative -1),意思时,下一步同样的动作会发生,环境会再一次被测试。所以时间不会向前推进直到条件是false. Instances 也能在基于某种特定events下改变时间轴。一些变量能控制时间轴速度,所以说时间轴是个很强大的工具。 一个拥有视野的ROOM 直到现在我们还在愚弄玩家,因为我们并没有驾施飞机在游戏世界里驰骋,仅仅是背景在移动。 这里有一些不利地方,特别地,背景不是那么容易改变的, (比如,它不能半路飞过陆地,既使你用时间轴,你也很难使用各种动作去改变它。). 在最后一个章节我们简单地介绍另外一种创作卷轴式射击游戏的方法。有一种方法是用一个很大的room. 飞机是真的移动的,我们用一种称之为视野(view)的概念。玩家一次只能看到room的一部分,这与大多数玩家对游戏的印象相符。为了达到这个目的,游戏里需要作一些改动。 我们先作一个基本的room。起初我们设置room宽度为640,但高度为4800。背景图片我们不给它设速度了。在room里我们放一些小岛。这些岛不再需要速度了我们也可以将step事件去掉了。他们是一些静止的物体。我们将飞机放在room底部,在 creation 事件里,给它设一个垂直速度为 -2 注意它是自动飞的,不是玩家控制它飞的, 最后,在room表单里点击view 面板. 为了使view可用,定义第一个view让它在开始可视。在最上面的位置,指示 4320, 意思是这个view会在room底部。如下图所示。 我们必须确认view以一个恒定的速度移动。最后我们使用life controller的step 事件,在这个事件里我们加一个动作设置一个变量view_yview 相对为(-2). 这个变量表示第一个view在room的位置。(当有多个视野时我们要用view_yview[0].) 在每一步view都会向上移动两个像素,使画面会动。还有许多相关于view的变量但是我们并不全都用到。 我们还要检查 view_yview 是否大于0.如果为0说明view已经到了顶部我们必须结束游戏。 要注意的事,我们要避免玩家让飞机飞出view之外,所以我们要检查飞机的位置是否太高了或太低了,我们还要用变量 view_yview 去检查飞机要留在view之内。 信息面板还有一个类似的问题,我们必须把它们画在相对于view_yview的正确位置,确信它会在视野之内。 飞机子弹必须要加速,我们还是要在它飞出view后毁掉它。 敌机也要处理一下,.我们不再用时间线或control object.我们要把它放在room里的确定位置。但我们不再设直到它出现时再移动,所以我们不再设置初始速度,在step事件里我们也不再检查它是否在view里我们也仅在它们在view里才射击,例如下: 注意我们设它一个小的多的垂直速度, Both for the enemy planes and for the bullets we should also change the conditions when they must be destroyed. 最复杂的是4号飞机,它是从底部出现的,技巧如下:我们把它从开始时就放在room里但让它不可见。并且只要它不可见我们让它对子弹碰撞事件或对主机的碰撞事件不作出反应, 当它在view之下时让它可见给它设一个较大的速度,看示例游戏。 现在是作房间的时候了,我们在不同关卡放上各种不同的敌机。.以不同的格局,这个可以在文件 1945_6.gm6里找到。你可以见到,使用view可以作出很有趣的游戏,你最好加上BOSS,这样使游戏更逼真更有挑战性,好了,就介绍这么多了,其实你还有好多工作要作,发挥你的想像力,成为一代游戏编程魔术师吧!
/
本文档为【gamemaker-1945飞行射击游戏制作】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。 本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。 网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。

历史搜索

    清空历史搜索