制作自己的街机太空射击游戏(15分钟?笑死,根本完不成)
在线手册
访问GameMaker官网下载GameMaker
本文下载的版本,GameMaker-Installer-2023.2.1.75.exe
选中新建
按钮,选择SPACE ROCKS
模板
输入项目名称:ship
点击我们开始吧!
右侧的资产浏览器,实心三角代表可以点击后展开
所以可以展开的是Rooms
和Sprites
右侧的资产浏览器,右键物体
,创建,物体
工作区显示了物体的属性面板
选中新建的Object1
,右键重命名为obj_player
修改player
属性,点击没有精灵
,展开Sprites
,选择spr_player
按以上步骤再添加三个物体
obj_bullet(spr_bullet),obj_rock(spr_rock_big),obj_game(没有精灵)
(不建议缩放工作区,字体会失真)
(字体如果已经失真,空白处右键,点击窗口,随便选择一个物体,让编辑器自动缩放回100%)
Ctrl
,滚动鼠标滚轮缩放工作区Ctrl
,左键选中空白处拖拽空白缩放工作区Shift
并滚动鼠标滚轮,左右浏览Ctrl+K
注释代码右侧的资产浏览器,展开Rooms
,选中Room1
左侧属性面板,设置宽度1000
高度1000
右侧的资产浏览器,展开Rooms
,选中Room1
右键,选择编辑
(或者选中Room1
后在左侧属性面板点击打开编辑器
)
左侧属性面板选中Instances
右侧的资产浏览器,拖拽obj_player
到房间内,拖拽多个obj_rock
到房间内
右侧的资产浏览器,物体,右键obj_player
,点击编辑
点击添加事件
,点击步
,点击步
提示需要选择脚本语言?默认选择GML CODE
好了,点击确定
在obj_player
物体的事件的右边的步
代码窗口,输入如下代码
if keyboard_check(vk_up)
{
motion_add(image_angle, 0.1);
}
按快捷键F5
或顶部的三角形播放
按钮,右上角显示构建中
提前打开浏览器盖住GameMaker(GameMaker编辑器本身就很耗电脑资源,盖住了Window就不计算GameMaker界面了)
构建完成后会在浏览器中显示
只需点击一下方向键上键
,飞船将一直向右缓慢移动,长按或多点击速度越快
向步
代码窗口追加代码
if keyboard_check(vk_left)
{
image_angle += 4;
}
if keyboard_check(vk_right)
{
image_angle -= 4;
}
F5运行,按方向键左键
或方向键右键
可以旋转
向步
代码窗口追加代码
move_wrap(true, true, 0)
F5运行,飞船移动至边界会在边界对面出现
向步
代码窗口追加代码
if mouse_check_button_pressed(mb_left)
{
instance_create_layer(x, y, "Instances", obj_bullet)
}
F5运行,移动飞船并左键点击游戏界面,实现原地拉子弹
右侧的资产浏览器,物体,右键obj_bullet
,点击编辑
点击添加事件
,点击创建
,选择GML CODE
,点击确定
在obj_bullet
物体的事件的右边的创建
代码窗口,输入如下代码
speed = 10;
direction = obj_player.image_angle;
F6调试,旋转飞船并左键点击游戏界面,实现旋转发射子弹
每发射20发子弹,GameMaker都检测到游戏的内存使用量上升,FPS下降
电脑内存并不是无限的,没人愿意玩FPS是0的游戏
回到GameMaker,点击方块图标停止运行
右侧的资产浏览器,物体,右键obj_bullet
,点击编辑
点击添加事件
,点击其他
,,选择离开房间
,选择GML CODE
,点击确定
在obj_bullet
物体的事件的右边的离开房间
代码窗口,输入如下代码
instance_destroy();
F6调试,一直发射子弹,内存使用量总体不会有上升趋势,FPS基本稳定。
右侧的资产浏览器,物体,右键obj_rock
,点击编辑
点击添加事件
,点击创建
,选择GML CODE
,点击确定
在obj_rock
物体的事件的右边的创建
代码窗口,输入如下代码
speed = 1;
direction = random(360);
image_angle = random(360);
F5运行,石块会缓慢移动
右侧的资产浏览器,物体,右键obj_rock
,点击编辑
点击添加事件
,点击步
,点击步
,选择GML CODE
,点击确定
在obj_rock
物体的事件的右边的步
代码窗口,输入如下代码
move_wrap(true, true, 100);
image_angle += 1;
F5运行,石块会缓慢旋转,离开房间外100像素后会从对面边界回来。
obj_rock
,点击添加事件
,点击碰撞
,点击物体
,点击obj_bullet
,GML CODE
obj_rock
碰撞obj_bullet
代码窗口
instance_destroy(other);
effect_create_above(ef_explosion, x, y, 1, c_white);
direction = random(360);
F5运行,射击石块,石块有爆炸效果并更换移动方向。
obj_rock
碰撞obj_bullet
代码窗口追加代码
if sprite_index == spr_rock_big
{
sprite_index = spr_rock_small;
instance_copy(true);
}
else if instance_number(obj_rock) < 12
{
sprite_index = spr_rock_big;
x = -100;
}
else
{
instance_destroy();
}
F5运行,游戏基本完成
按住方向键左键
,左键多次点击游戏界面,飞船成为了一个固定炮台
射击石块,大石块会分裂,小石块会消失
obj_player
,点击添加事件
,点击碰撞
,点击物体
,点击obj_rock
,GML CODE
obj_player
碰撞obj_rock
代码窗口
effect_create_above(ef_firework, x, y, 1, c_white);
instance_destroy();
obj_game.alarm[0] = 120;
F5运行,将飞船撞向石块,出现报错,因为飞船找不到obj_game
,并且还没写Alarm 0
事件
右键编辑Room1
,将obj_game
拖进房间
放在左侧并拉伸尺寸,使其容易看见
obj_game
,点击添加事件
,点击计时器
,点击计时器 0
,GML CODE
计时器 0
代码窗口
room_restart();
F5运行,将飞船撞向石块,飞船粉碎,2秒后游戏重新开始
obj_game
,点击添加事件
,点击创建
,输入如下代码
points = 0;
obj_game
,点击添加事件
,点击绘制
,点击绘制GUI
,输入如下代码
draw_text(10, 10, points);
F5运行,左上角有一个数字0
obj_rock
碰撞obj_bullet
代码窗口追加代码
obj_game.points += 50;
F5运行,射击石块,左上角数字会增加
F5运行,开玩!
官方建议导出:怎样将游戏发行到 GX.games | GameMaker
我不接受建议
F5运行,运行成功
打开路径%LOCALAPPDATA%\GameMakerStudio2\GMS2TEMP
找到修改日期最新的文件夹,例如ship_67D0F02F_VM
,将该文件夹复制到Windows桌面上
(当然你可以整个GMS2TEMP
文件夹都复制下来,占用的文件跳过就行了)
复制完文件夹关闭GameMaker,关闭浏览器(只为证明后续步骤和它们没关系,当然你也可以不关)
接下来使用有服务器能力的软件或web打包软件,包括但不限于
python -m http.server 8000
访问Caddy官网点击Download
下载
将下载好的caddy_windows_amd64.exe
文件放入.\ship_319F3B93_VM\runner
文件夹
在.\ship_319F3B93_VM\runner
文件夹新建start.bat
文件,内容如下
start http://127.0.0.1/runner.html && caddy_windows_amd64.exe file-server
运行start.bat
即可
下载并解压https://registry.npmmirror.com/-/binary/electron/v23.2.1/electron-v23.2.1-win32-x64.zip
将ship_319F3B93_VM
中的runner
文件夹放入electron-v23.2.1-win32-x64
文件夹
在electron-v23.2.1-win32-x64
文件夹新建start.bat
文件,内容如下
electron.exe runner\runner.html
运行start.bat
即可