编程语言应用

首页 » 常识 » 问答 » 制作自己的街机太空射击游戏
TUhjnbcbe - 2024/9/13 17:25:00

在GameMaker中创建你自己的小行星版本。

我们将通过三个简单的步骤构建此游戏:

对飞船进行编程以移动

让太空岩石爆炸

完成游戏

如何创建新项目

打开游戏制作器。您将看到一个“新建”按钮-单击它。

在这里,您可以从空白项目开始,也可以选择一个模板。

对于这个游戏,让我们使用“太空岩石”模板。这为您提供了本教程的所有图像。

输入“项目名称”,然后点击“LetsGo!

您现在正在您的项目中!

右侧的资产浏览器包含您的所有资产。现在,您将看到四个精灵,这是您可以在游戏中使用的图像。

有“spr_player”,你将驾驶的船,“spr_bullet”,你将从你的船上发射,还有两块岩石,你将摧毁它。

如何使用资产浏览器

在同一个资产浏览器中,我们要创建一些对象。对象是你如何使图像栩栩如生,通过编程来移动、拍摄或做任何你需要它的事情。

你的船,岩石,甚至你发射的子弹都是作为物体创建的。我们将它们放在资产浏览器的“对象”组中,该组当前为空。

创建新对象将其重命名为obj_player

右键单击“对象”组,然后选择“创建-对象”。将其名称从“Object1”更改为“obj_player”。

按F2重命名所选对象,或右键单击它并选择“重命名”。

如何编辑对象

您的新对象具有编辑器。在这里,您可以更改其属性并对其进行编程,我们将很快执行此操作。

每个对象都需要一个精灵——否则你会怎么看?

单击显示“无精灵”的位置,然后从“精灵”组下选择spr_player。

我们现在需要更多的对象。就像您创建obj_player一样,再创建三个对象:

obj_bullet:这是你的飞船发射的子弹。将角色设置为spr_bullet。

obj_rock:这是你要摧毁的岩石。将精灵设置为spr_rock_big,因为每块石头都会开始变大,并在您射击时缩小。

obj_game:这是一个“静默”对象,用于管理您的游戏。它不需要精灵。

这些都是你需要的物品!现在让我们将它们放在一个关卡中。

如何在GAMEMAKER中制作关卡

GameMaker中的每个“关卡”都是一个房间资产。查看资产浏览器-已经有一个适合您:

双击它。“房间编辑器”将打开,您将在其中构建您的关卡。

在做任何事情之前,我想调整房间的大小,使其成为x的正方形。

如何在游戏制作中调整房间大小

查看窗口的左下角-您将看到一个“检查器”窗口。

在这里,将房间的宽度和高度设置为。您可以使用其他大小。

如果您没有看到这些选项,请进入资产浏览器并单击Room1。选择房间时,它们应该是可见的。

如何在房间中放置对象

查看房间编辑器中的左侧面板:默认情况下创建了两个图层,“实例”和“背景”。

实例:这是一个实例层。你的物品放在这里,就像麦片放进碗里一样。

背景:这是一个背景层。更改背景颜色或应用图像。

单击“实例”层以将其选中-这是您的对象将要去的地方:

在资源浏览器中,拖动obj_player并将其放置在房间中。

你的玩家飞船现在在房间里,作为一个“实例”——你可以在房间里放置任何物体的多个“实例”!

对岩石执行此操作-多次将obj_rock拖入房间,直到您有大约六个实例:

舞台是为戏剧搭建的。我们只需要教演员他们的角色。

如何移动船

如果您现在运行游戏(按F5或顶部的“播放”按钮),您的游戏将打开,但它在晚上会像冰冻的湖一样静止。

你的物体在那里,你的房间在那里,但没有任何东西被编程来移动或做任何事情。

让我们努力吧。

如何在游戏制作中使用事件

按下“向上箭头”键时,我们想推动玩家飞船向前移动。

在资产浏览器中,双击obj_player。

查看其对象编辑器-特别是“事件”窗口。

单击“添加事件”,然后选择“步骤”。

系统可能会要求您在GML代码和GML视觉对象之间进行选择。

如果您以前做过编程,请选择GMLCode,如果您是新手,请选择GMLVisual。

本教程将涵盖这两个选项,因此您可以选择您喜欢的任何选项。

做出选择,并启用“不要再要求此项目”。什么是步骤事件?

做出上述选择后,您将看到Step事件的窗口打开。

步骤事件的GML代码窗口

一个对象有许多事件。每个事件都有自己独特的运行时间。

例如,你早上刷牙。然后你几乎整天都在呼吸,每一秒。

如果你是一个GameMaker对象,你会在“创建”事件中刷牙,在“步骤”事件中呼吸。

这是因为“Create”事件是为实例运行的第一个事件,并且它只运行一次。然后,当实例存在时,“Step”事件在每一帧中始终运行。

我们将对这个“步骤”事件进行编程以移动飞船,因为这是必须发生的连续事情,类似于呼吸。

如何对事件进行编程

很快,我将向您展示一些要添加到“步骤”事件中的内容。添加它们的方式在GML代码和GML视觉中有所不同。

如果您使用的是GML视觉对象,请在工具箱中搜索相关操作,并将其拖到事件区域中:

搜索操作,然后将其拖到事件区域中。

如果您使用的是GML代码,只需将代码写入事件窗口即可。

如何添加动作

好的,所以,我们需要移动船。

如果您按住向上箭头键,则会向实例添加运动,使其沿特定方向移动。

在GML视觉对象中,第二个操作“附加”到第一个操作。仅当第一个操作的条件为true时,第二个操作才会运行。要将“添加动作”附加到“如果按下键”,请将其放在条件操作的右边缘,如上所示。您只能将操作附加到绿色的“条件”操作。

所以-我们正在增加一个方向的运动。那是什么方向?

该方向是实例的“image_angle”,即船舶面向的位置。

我们添加的运动量是0.1。您可以更改此设置以使您的飞船更快或更慢。

好了,现在怎么办?

运行游戏(按F5,或点击顶部的“播放”按钮),然后在游戏中按向上箭头键。

船还活着!它向右移动,因为这是实例的默认角度。

不过它没有转弯...

如何轮换实例

为了移动飞船,我们正在向“image_angle”添加运动。此变量存储实例旋转的角度。

要轮换实例,您只需更改此变量。

在同一个“步骤”事件中,添加以下内容:

ifkeyboard_check(vk_left){image_angle+=4;}ifkeyboard_check(vk_right){image_angle-=4;}

这里的逻辑很简单:

如果按住左箭头键,则从image_angle中减去4

如果按住向右箭头键,则image_angle中添加4

运行游戏,您现在可以移动和转弯了!

这很好,但有一个小问题。

如果你的船离开了房间,它就会永远消失。

为了解决这个问题,我们将让飞船“缠绕”在房间周围:如果它从顶部离开,它就会从底部回来。

如何在GAMEMAKER中包装实例

在同一个“步骤”事件中,添加以下内容:

move_wrap(true,true,0)

确保在任何条件之外添加它。

这告诉飞船在外面时绕着房间转。水平和垂直环绕均已启用,换行边距设置为0。

包装边距控制实例在包装之前必须离开房间多远。我们现在不使用它,但它稍后会派上用场。

啊,船的运动完成了!您现在可以在房间内移动、转动和环绕。

[1飞船移动??/2摧毁岩石/3完成游戏]

这离我们的清单只有一步之遥。到岩石上:我们来了!

如何在游戏制作中射击

之前我们创建了一个名为obj_bullet的对象。为了拍摄,我们将在飞船的位置创建此对象的新实例。

子弹将以与船本身相同的方向快速移动。

当子弹在房间外时,我们会摧毁它。这可以防止内存泄漏,如果您射击的所有子弹都永远存在,就会发生内存泄漏。

如何创建实例

在obj_player的步骤事件中,添加以下内容:

ifmouse_check_button_pressed(mb_left){instance_create_layer(x,y,"Instances",obj_bullet)}

这将检查鼠标左键是否被“按下”。这与检查它是否被“按住”不同,因为这只会检查您是否刚刚点击了按钮。

如果按下鼠标左键,它将创建obj_bullet的实例。除了要创建的对象之外,它还需要其他三个参数:

x:将在其中创建实例的x(水平)位置

y:将在其中创建实例的y(垂直)位置

layer:将在其中创建实例的房间层

对于x和y,我们传入玩家的x和y变量,因此项目符号是在同一位置创建的。我们将层设置为“实例”。

你现在可以开枪了!事情是...子弹根本不动。

如何不断移动实例

对于子弹,我们将在创建子弹后设置其速度。在那之后,它将继续永远移动,直到它在房间外。

双击obj_bullet。在“事件”窗口中,添加“创建”事件。

此事件是第一个在实例中运行的事件,并且只运行一次。这就是为什么它被称为“创建”,因为它在创建实例后立即运行。

在这种情况下,请添加以下内容:

speed=10;direction=obj_player.image_angle;

我们告诉子弹以10的速度移动——即每帧10像素。更改此设置以使子弹走得更快或更慢。

这就是你的子弹移动的速度,但它会移动到哪里?

这就是方向控制的东西。我们将其设置为obj_player.image_angle-这意味着我们从obj_player中拉出image_angle-告诉子弹移动到玩家面对的位置。

如何在GAMEMAKER中销毁实例

我们的子弹现在应该在移动,但正如我之前所说,它们在离开房间时应该被摧毁。

在“事件”窗口中,单击“添加事件”。将鼠标悬停在“其他”上,然后选择“房间外”。

此事件在实例退出会议室区域后立即运行。在此处添加以下内容:

instance_destroy();

我认为这解释了自己...在这里,实例被销毁,因此它不再存在于房间中。

当然,对象本身会继续存在于资产浏览器中,并且可以随时从中创建新实例。

呜呼!我们现在可以拍摄了。

不过,看起来岩石并不在乎。

他们最好跑。

如何向随机方向移动

所有的岩石都应该朝随机方向移动,但速度很慢,所以它们并不难捕捉。

双击obj_rock。添加Create事件,并在此处添加以下内容:

speed=1;direction=random();image_angle=random();

首先,我们将速度设置为1。与子弹的速度10相比,这是非常低的,这是预期的。

然后我们将方向设置为random()。这可以是0到(一个完整的圆)之间的任何随机数。

这设置了岩石移动的方向,但不会旋转精灵——所以我们也应用了一个随机数来image_angle。

岩石现在正在移动!但有两个问题:

如果一块石头掉到房间外面,它就会丢失,再也不会回来了

岩石看起来非常安静和无聊

岩石包装

在同一个obj_rock对象中,添加Step事件。

我们启用岩石的包装,边距为。这意味着一块石头只有在房间外超过像素时才会环绕。

如果您使用边距0,您会看到岩石在屏幕上从一个点跳到另一个点,但现在它在屏幕外这样做。

最后,我们在image_angle上加1,因此岩石继续不断旋转。它只是看起来更逼真。

现在,岩石也环绕着房间,它们旋转,给游戏带来更太空的感觉。

#百家新收益#
1
查看完整版本: 制作自己的街机太空射击游戏