Game Maker - 转 On/Off 声音

Game Maker - Turn On/Off Sound

我有什么

我有两个房间:rm_homerm_options。我有一个声音:snd_Bgm。而且,我有三个对象:obj_bgmobj_BtnOnClickedobj_BtnOffClicked

我想要的很简单

玩家可以转 on/off snd_Bgm.

我做了什么

obj_bgm,我有这些事件:

Create Event: set var global.sound to 1

Room Start: stop sound snd_Bgm; if global.sound == 1 then play sound snd_Bgm

obj_BtnOnClicked,我有这些事件:

Left-Pressed Event: play sound snd_Bgm; set var global.sound to 1

obj_BtnOffClicked,我有这些事件:

Left-Pressed Event: stop sound snd_Bgm; set var global.sound to 0

我把obj_BtnOnClickedobj_BtnOffClicked放在rm_options里,可以从rm_home访问。然后,我把 obj_bgm 放在 rm_home.

就是这个问题

游戏开始时会显示rm_home并播放snd_bgm。我去rm_options,然后点击obj_BtnOffClicked关掉声音,这样声音就关了。但是,当我回到 rm_home 时,声音又响了。

我的想法

我不应该把Create Event: set var global.sound to 1放在obj_bgm中,因为当rm_home开始时,它从Create Event中获取var global.sound的值。但是,如果我将 Create Event 放入 obj_BtnOnClickedobj_BtnOffClicked,它会显示 Get Error.

我该怎么办?请解释你的答案。谢谢。

你的房间和你的变量是持久的吗?

如果rm_home不是持久化的,每次离开它都会重新启动。因此,放置在该房间中的每个对象都将被重置,包括 obj_bgm,这会将您的声音变量设置为 1。我认为这就是当您回到 rm_home.[=10= 时声音重新启动的原因]

如果您仍然想重置房间而不是这个特定对象,您可以将其设置为持久化。您可以通过勾选对象中的框或通过代码来完成。

如果您将创建事件放在按钮对象中,则在您进入选项室之前不会读取该事件。所以当 obj_bgm 试图将它设置为 1 时,它还不存在。我相信它会导致错误。

我根据假设发表这些评论,但我需要查看您的代码或错误消息以进一步帮助您。