<iframe allowfullscreen="true" data-mediaembed="bilibili" frameborder="0" id="ueQAtnUB-1725787920037" src="https://player.bilibili.com/player.html?aid=113101219301267"></iframe>
学霸带你游戏化 GameMaker 引擎世界你好 |
得分系统与玩家控制
在现代游戏开发中,得分系统和玩家控制是构建互动游戏体验的核心元素。得分系统不仅用来衡量玩家的表现,也为游戏增添了挑战和激励。而玩家控制则包括了角色的移动、旋转等操作,这些控制方式直接影响到游戏的流畅性和玩家的体验。本文将详细讲解如何在 GameMaker 中实现按下“1”键增加得分的功能,并探讨玩家控制(如移动和旋转)以及绘制代码的编写。
得分系统的基础实现
得分系统的实现首先包括了设置一个得分变量以及在游戏中检测用户的输入。本文将通过具体的代码示例展示如何在 GameMaker 中创建一个得分管理对象,并处理玩家按键以更新得分。这个基础实现是理解和扩展得分功能的前提。
玩家控制的实现细节
玩家控制涉及角色的移动和旋转操作,这些操作直接影响游戏的互动性和挑战性。本文将介绍如何在 GameMaker 中编写控制代码,实现角色的基本移动和旋转。通过对玩家控制的细节进行处理,我们可以更好地理解得分系统如何与玩家操作结合。
绘制代码的编写与优化
绘制代码不仅用于显示得分,还涉及到游戏中的视觉反馈和交互元素。本文将探讨如何在 GameMaker 中编写和优化绘制代码,以确保得分信息和玩家控制效果能够清晰地呈现给玩家。通过这些技术细节的优化,我们可以提升游戏的整体质量和用户体验。
GameMaker 引擎概述
引擎简介
GameMaker 是一款广泛使用的游戏开发工具,主要用于创建 2D 游戏。其简易的拖放编程和强大的 GML(GameMaker Language)脚本语言,使其适合初学者和专业开发者。GameMaker 提供了开发 2D 游戏所需的所有功能,如碰撞检测、动画制作和声音处理等。
开发背景
GameMaker 的开发起源可以追溯到 1999 年,由 Markus Persson(后来因《我的世界》(Minecraft)而出名)首次开发,随后由 YoYo Games 扩展和维护。GameMaker 在游戏开发社区中逐渐建立起了自己的地位,特别是在独立游戏开发领域。
支持平台
GameMaker 支持多种平台,使开发者可以将游戏发布到多个设备上:
- Windows 和 macOS:用于开发和测试桌面游戏。
- iOS 和 Android:支持移动设备游戏。
- HTML5:允许游戏在网页浏览器中运行。
- Nintendo Switch、PlayStation 和 Xbox:支持主机平台,但需要额外的许可和适配工作。
主要特性
- 拖放编程:通过可视化工具创建游戏逻辑,无需编写代码。
- GML 脚本语言:用于实现复杂的游戏逻辑,支持面向对象编程和高级功能。
- 内置编辑器:包括图像编辑、动画和音效处理工具,便于资源管理。
- 调试工具:提供断点、性能分析和变量监视功能,帮助开发者优化游戏性能。
开发语言
- GML(GameMaker Language):一种基于 C 语言的脚本语言,支持多种编程概念,如变量、条件语句、循环和函数。GML 是 GameMaker 的核心部分,用于编写游戏逻辑和实现自定义功能。
界面介绍
主窗口布局
GameMaker 的主窗口主要分为以下几个区域:
- 资源管理器:右侧面板,显示和管理游戏中的所有资源。
- 场景编辑器:中央面板,用于设计和编辑游戏的关卡。
- 事件编辑器:用于设置对象的事件和行为。
- 脚本编辑器:用于编写和编辑 GML 代码。
- 调试工具:用于运行和调试游戏,提供性能分析和错误检查功能。
资源管理器
资源管理器用于组织和访问游戏资源。它包括以下部分:
- 精灵:角色和物体的图像资源。每个精灵可以包含多个帧,用于创建动画。
- 对象:游戏中的实体,如玩家、敌人和道具。对象定义了游戏中的行为和交互。
- 房间:游戏中的场景,包含对象、背景和其他元素。房间用于组织游戏的各个关卡。
- 声音:游戏中的音效和背景音乐。声音资源可以用来增强游戏的沉浸感。
示例:《光明旅者》(Hyper Light Drifter)使用了大量精灵和对象资源来创建丰富的游戏世界,每个角色和敌人都有专门的图像和行为定义。
事件编辑器
事件编辑器用于定义游戏中的事件和响应。这些事件包括:
- 创建事件:对象创建时触发的事件,例如初始化变量。
- 碰撞事件:当对象与其他对象发生碰撞时触发,例如敌人碰到玩家。
- 键盘事件:处理用户输入,如按键按下和释放事件。
示例:《传说之下》(Undertale)中,事件编辑器用于处理复杂的对话系统和角色行为,包括触发对话框和角色动作。
脚本编辑器
脚本编辑器用于编写 GML 代码。它的主要功能包括:
- 语法高亮:使代码更易读。
- 代码补全:帮助编写代码时自动完成函数和变量名。
- 错误提示:识别并提示代码中的错误,以便及时修复。
示例:《蔚蓝》(Celeste)开发中,脚本编辑器用于实现角色的复杂控制和物理效果,帮助开发者精确控制角色的行为。
调试工具
调试工具包括:
- 断点调试:允许开发者在代码中设置断点,逐步执行代码并检查程序状态。
- 变量监视:实时查看和修改变量的值,以调试和优化游戏逻辑。
- 性能分析:监控游戏的性能,包括帧率和内存使用,帮助识别和解决性能问题。
示例:《迈阿密热线》(Hotline Miami)的开发者利用调试工具优化游戏的帧率和性能,确保游戏流畅运行。
快捷键操作
常用快捷键
- Ctrl + N:新建项目
- Ctrl + O:打开项目
- Ctrl + S:保存当前工作
- Ctrl + Z:撤销操作
- Ctrl + Y:重做操作
示例:《星露谷物语》(Stardew Valley)的开发者使用这些快捷键来高效地管理和保存游戏开发过程中的文件和修改。
编辑器快捷键
- F11:打开/关闭调试窗口
- Ctrl + G:跳转到指定行
- Ctrl + Space:代码补全
示例:《铲子骑士》(Shovel Knight)的开发者使用这些快捷键来快速定位代码问题和进行调试,提升开发效率。
运行调试快捷键
- F5:运行游戏
- F6:逐步执行
- F7:跳过当前代码行
示例:《挺进地牢》(Enter the Gungeon)的开发者使用这些快捷键来实时测试游戏功能和修复代码中的问题。
资源管理快捷键
- Alt + S:创建新精灵资源
- Alt + U:创建新声音资源
- Alt + C:创建新脚本资源
示例:《传说之下》(Undertale)开发中,开发者使用这些快捷键来快速更新和编辑游戏资源,确保资源的及时更新。
其他功能快捷键
- Ctrl + F7:清理编译器缓存
示例:《迈阿密热线》(Hotline Miami)开发过程中,这些快捷键帮助开发者高效完成任务和构建游戏版本。
HelloWorld 示例
创建新项目
- 打开 GameMaker Studio。
- 选择 “新建项目” 并命名项目(例如:“HelloWorld”)。
- 选择 “SHOOTER” 类型进行项目创建。
Open GameMaker Studio. Select “New Project” and name it (e.g., “HelloWorld”). Choose “SHOOTER” genre for the project creation.
示例:《超级包装箱》(Super Crate Box)的开发者首先创建了一个新的项目,以便开始构建游戏关卡和功能。
设定主对象
- 在资源管理器中,右键点击 “对象”,选择 “创建对象”。
- 命名为
hi_main
。 - 为该对象添加 “绘制(Draw) => 绘制(Draw)” 事件。
In the Resource Manager, right-click on “Objects” and select “Create Object.” Name it hi_main
. Add a “Draw => Draw” event to this object.
示例:《光明旅者》(Hyper Light Drifter)中,开发者创建了多个对象来定义游戏中的角色和敌人。
编写代码
- 在 “绘制” 事件中,输入以下代码:
In the “Draw” event, enter the following code:
// 游戏启动时将会蹦出 Hello World! 弹窗
show_message("Hello, World!");
示例:《情热传说》(Tales of Zestiria)中,类似的代码用于初始化对话框和显示欢迎信息。
配置房间
- 在资源管理器中,右键点击 “房间”,选择 “创建房间”。或选择一个现有房间。
- 将
hi_main
对象拖到房间中。
In the Resource Manager, right-click on “Rooms” and select “Create Room.” Drag hi_main
into the room. Or choose an existing room.
示例:《光明旅者》(Hyper Light Drifter)中的房间配置包括设置游戏的场景和对象位置。
运行和测试
- 点击 “运行” 按钮(绿色播放图标)。
- 游戏启动后,会弹出一个消息框,显示 “Hello, World!”。
Click the “Run” button (green play icon). After the game starts, a message box will pop up showing “Hello, World!”.
示例:《迈阿密热线》(Hotline Miami)开发过程中,开发者通过运行和测试功能来确保游戏的基本功能正常工作。
玩家加分、控制及旋转
初始化代码
在 Draw 事件脚本中添加:
// 在对象创建时初始化变量
score = 0;
解释:这段代码在对象创建时将 score
变量初始化为 0。这在游戏开始时设置初始状态是很常见的做法。
This code initializes the score
variable to 0 when the object is created. It's a common practice to set initial states at the beginning of the game.
示例:《蔚蓝》(Celeste)中,类似的初始化代码用于设置玩家的初始分数或生命值。
显示玩家精灵和文本
首先双击对象,如果看到没有精灵(No Sprite),则需要点击,赋予它 Sprites 组下面的 spr_player 精灵图片,这样我们才能在屏幕上看到玩家战机。
在 Draw 事件脚本中添加:
// 绘制玩家精灵(Sprite)
draw_self();
// 在玩家所处位置显示文本
draw_text(x, y, "Hello World " + string(score));
// 检测是否按下数字键 1
if (keyboard_check_pressed(ord("1"))) {
// 增加得分
score += 1;
}
解释:使用 draw_text
函数在对象的坐标位置绘制文本。这使得文本显示在指定位置,通常用于显示游戏中的信息或提示。
The draw_text
function displays text at the object's coordinates. This is commonly used to show information or prompts in the game.
示例:《传说之下》(Undertale)中,使用类似的函数来显示对话框中的文本。
基本事件处理
在 Draw 事件脚本中添加:
// 检测是否按下 Space 空白键
if (keyboard_check_pressed(vk_space)) {
// 按下 Space 空白键则弹窗显示 Space key pressed
show_message("Space key pressed");
}
解释:这段代码检查是否按下了空格键,并弹出消息框。这在处理用户输入时非常有用。
This code checks if the space key is pressed and displays a message box. It's useful for handling user input events.
示例:《星露谷物语》(Stardew Valley)中,类似的事件处理代码用于检测玩家的输入并执行相应的操作。
对象控制
在 Draw 事件脚本中添加:
// 绘制玩家精灵(Sprite)
draw_self();
// 初始化玩家属性
speed = 0; // 移动速度
// 玩家移动控制
if (keyboard_check(vk_right)) {
x += speed + 8;
}
if (keyboard_check(vk_left)) {
x -= speed + 8;
}
if (keyboard_check(vk_up)) {
y -= speed + 8;
}
if (keyboard_check(vk_down)) {
y += speed + 8;
}
解释:根据用户的按键输入控制对象的左右移动。keyboard_check
函数检测按键状态,并相应地改变对象的位置。
This code controls the object’s movement based on user input. The keyboard_check
function detects key presses and moves the object accordingly.
示例:《铲子骑士》(Shovel Knight)中,角色的移动和控制逻辑类似地使用了键盘输入检测。
容错处理
在 Draw 事件脚本中添加:
// 容错处理
// 检测并调整左边界
if (x < sprite_width / 2) {
x = sprite_width / 2; // 防止玩家超出左边界
}
// 检测并调整右边界
if (x > room_width - sprite_width / 2) {
x = room_width - sprite_width / 2; // 防止玩家超出右边界
}
// 检测并调整上边界
if (y < sprite_height / 2) {
y = sprite_height / 2; // 防止玩家超出上边界
}
// 检测并调整下边界
if (y > room_height - sprite_height / 2) {
y = room_height - sprite_height / 2; // 防止玩家超出下边界
}
解释:检查对象的 x 坐标是否小于 0,如果是,则将其设为 0。这可以防止对象超出屏幕边界,是基本的错误处理技巧。
This code checks if the object’s x coordinate is less than 0 and sets it to 0 if so. This prevents the object from going out of bounds, a basic error handling technique.
示例:《迈阿密热线》(Hotline Miami)使用类似的代码来防止游戏对象超出屏幕区域,从而避免视觉上的错误和游戏崩溃。
得分系统与玩家控制的实现
通过对 GameMaker 中得分系统和玩家控制的详细探讨,本文不仅提供了实现基础得分功能的步骤,还涵盖了玩家控制的编程方法和绘制代码的优化。了解这些关键技术点将有助于开发者在游戏设计中实现更具互动性和吸引力的游戏体验。
得分系统的实现步骤
得分系统的实现包括得分变量的初始化、按键检测和得分增加功能。这些步骤确保了玩家通过特定操作可以有效地增加得分,并对游戏过程进行有效的记录和反馈。
玩家控制的编程技巧
玩家控制涉及角色的移动、旋转等操作。这些操作的编程技巧对于创建一个响应灵敏的游戏角色至关重要。掌握这些技巧可以确保玩家操作的顺畅性和游戏体验的提升。
绘制代码的作用与优化
绘制代码不仅用于显示得分,还涉及到游戏的视觉效果和用户界面的呈现。通过优化绘制代码,开发者可以确保游戏中的得分信息和玩家控制效果更加直观和美观。
实际应用中的改进建议
在实际应用中,开发者可以根据游戏的需求进一步改进得分系统和玩家控制功能。参考成功游戏中的实现方法,可以帮助开发者设计出更加完善的游戏机制,并提升玩家的整体体验。
标签:得分,GameMaker,游戏,示例,学霸,代码,玩家,引擎 From: https://blog.csdn.net/stevenchen1989/article/details/142025571