全局事件 - dasasdhba/Super-Mario-Vandal-Editor GitHub Wiki

本章主要介绍本项目的全局事件,其为 persistent 对象 o_main 负责。

游戏初始化

在对象 o_mainCreate 事件中,有着本游戏的初始化代码,其中包括 dll、script、音乐、背景、存档的初始化等诸多内容,也包括一些全局变量的声明。 以下内容是需要你注意的:

data

global.savekey = "dasasdhbasuperdasasdhbamariodasasdhba" //用于存档加密的秘钥,建议修改
global.audiokey = "dasasdhbavandaldasasdhbaeditordasasdhba" //用于外置音频加密的秘钥,建议修改
global.checkkey = "dasasdhbagamedasasdhbamakerdasasdhba" //用于外置音频验证的秘钥,建议修改
global.audioext = "fmod" //外置音频的扩展名(未加密)
global.audiocryptext = "fev" //外置音频的扩展名(加密后),如何加密将在后续章节说明
global.soundencrypt = false //是否加密音效(.\Data\Sound\ 中的音频)
global.musicencrypt = false //是否加密音乐(.\Data\Music\ 中的音频)

music channel

global.channel_max = 32 这是本项目音乐的通道数量(音乐,不是音效),默认是 32 个(0~31,其中 32 用于无敌星音乐) 如果你根本不需要多通道,或者根本不需要这么多,可以设置为 1 或者其他值。

control 与 setting

global.key_up = vk_up
global.key_down = vk_down
global.key_left = vk_left
global.key_right = vk_right
global.key_jump = ord("Z")
global.key_fire = ord("X")
global.key_pause = ord("P")

本项目的按键设置以及其他设置都是通过全局变量的方式实现的,如果你需要做相关开发调整,请务必注意。 比如,如果你要编写检测玩家是否按跳的代码,你就不能使用:

if keyboard_check(ord("Z"))
   ...

这样你的玩家设置的按键就无效了,正确方法应该是:

if keyboard_check(global.key_jump)
   ...

顺带一提,当 \Data\Save\setting.ini 文件存在时,游戏会优先读取,否则游戏会将此处的默认设置写入此文件。

pause

global.pause 是用于控制整个游戏是否暂停的,目前所有的对象都受到这个条件的限制。 你可能已经发现,所有的对象的 Create 事件都有 instance_init() 这么一条代码,这是在声明暂停系统以及物理系统需要使用的一些变量。 其中,如果你的对象不需要暂停系统来控制其动画的暂停,你可以将变量 pause 设为 -1。 如果你要作一些开发,请务必注意这一点。

level

global.life = 4
global.scores = 0
global.coin = 0
global.time = -1 //-1 表示无时间限制,也是待命状态,当该变量 >= 0 时,如果 Room 发生了跳转,时间会被继承而不是重新设置
global.mario = 0 //0 = 小马里奥;1 = 大马里奥;2 = 花身;3 = 甜菜;4 = 绿果
global.checkpoint = 0 //记录玩家碰到的 CP 数量,其中还有一个数组 global.checkid[] 用于记录玩家碰到的 CP
global.checkroom = 0
global.deathroom = 0
global.oneoff = false //在当前关卡死了一次之后设为 true

物理系统相关

在对象 o_mainBegin StepEnd Step 事件中,有一些用于运动实心补正的代码。 注意,它们的作用对象不是 o_main 本身,而是 o_solid/platform_moving,一般来说你不需要管这块的内容。 而在 End Step 中,还对物理系统有一些额外处理。

滚屏相关

在对象 o_mainBegin StepEnd Step 事件中,有一些滚屏相关的代码,其中部分代码作用于对象 o_camera 我之所以把这些内容全部堆到 o_main,是因为这里面的一些执行顺序是需要保证的。

背景相关

在对象 o_mainDraw 事件中,有一些处理背景系统的绘制代码。 我们知道 GM8 仅仅只支持 8 个背景图层,为了突破这一限制,我内置了这一背景绘制功能。 关于这块具体如何使用将在后续章节说明。 顺带一提,本项目目前还没有使用这个系统。

设置游戏标题

在对象 o_mainRoom Start 事件中,有一行代码用于设置游戏标题,你很容易找到它。 如果你希望不同房间显示不同的标题名称,请直接去掉这行代码,因为 GM 默认显示的应该是房间的标题。

音频防修改

在对象 o_mainRoom Start 事件中,有两行用于检测音频是否被修改的代码。 默认情况下,检测到音频被修改会直接退出游戏,如果需要,你也可以作一些调整。

其他

其他代码在你的开发过程中可能不太重要,也不太需要管,不过还是可以看一看的。