在 Phaser 游戏引擎中的状态之间传递音乐对象
Passing a music object between states in a Phaser game engine
我的问题具体关于 Phaser game engine
所以我有一个有几个状态的游戏,每个状态的定义如下:
var myGame = {};
myGame.Boot = function (game) {
};
myGame.Boot.prototype = {
init: function () {
//some init
},
create: function () {
//this.scale.scaleMode
this.state.start('Preloader');
}
};
游戏定义如下:
var game = new Phaser.Game(gameWidth, gameHeight, Phaser.AUTO, 'main');
game.state.add('Boot', myGame.Boot);
game.state.add('Preloader', myGame.Preloader);
game.state.add('MainMenu', myGame.MainMenu);
普通,简单,标准。一切都很好(到目前为止)。
以下是我在 'Preloader' (same as here) 中定义音乐的方式:
fx = game.add.audio('sfx');
fx.allowMultiple = true;
fx.addMarker('alien death', 1, 1.0);
fx.addMarker('boss hit', 3, 0.5);
fx.addMarker('escape', 4, 3.2);
fx.addMarker('meow', 8, 0.5);
fx.addMarker('numkey', 9, 0.1);
this.sound.setDecodedCallback(
[gg.fx],
this.start, this
);
其中 fx 是一个全局变量。然后,如果我需要播放音乐,我会做
fx.play(button.name);
代码有效,但我必须始终保留这个全局变量(或将其传递到我需要音乐的每个州)。
所以我有几个问题:
- 我不喜欢全局变量。有更好的方法吗?我计划制作大量效果,我希望有一种简单的方法来管理它们。
- 如果我没有使用全局变量并调用类似 this.sound.play("name") 的代码,它会说该文件不在缓存中。有没有办法将它添加到全局缓存?这是个坏主意吗?
谢谢!
- 全局变量:
您实际上可以在 myGame
上定义这些。虽然它使用不同的方式来定义这些,但请看一下 Full Screen Mobile Template that's part of the Phaser codebase itself. The creator of Phaser actually recommended this on their forums for declaring 'global' variables.
这给你这样的东西:
myGame.fx = game.add.audio('sfx');
// ...
- 全局缓存:
好问题。我发现的唯一一件事就是分解 MP3 文件并将它们分别加载到缓存中。这样你的缓存就有一个对象 name/key.
但是如果您将这些添加到 myGame
对象中,您应该能够将音频保存在一个文件中。
我的问题具体关于 Phaser game engine
所以我有一个有几个状态的游戏,每个状态的定义如下:
var myGame = {};
myGame.Boot = function (game) {
};
myGame.Boot.prototype = {
init: function () {
//some init
},
create: function () {
//this.scale.scaleMode
this.state.start('Preloader');
}
};
游戏定义如下:
var game = new Phaser.Game(gameWidth, gameHeight, Phaser.AUTO, 'main');
game.state.add('Boot', myGame.Boot);
game.state.add('Preloader', myGame.Preloader);
game.state.add('MainMenu', myGame.MainMenu);
普通,简单,标准。一切都很好(到目前为止)。
以下是我在 'Preloader' (same as here) 中定义音乐的方式:
fx = game.add.audio('sfx');
fx.allowMultiple = true;
fx.addMarker('alien death', 1, 1.0);
fx.addMarker('boss hit', 3, 0.5);
fx.addMarker('escape', 4, 3.2);
fx.addMarker('meow', 8, 0.5);
fx.addMarker('numkey', 9, 0.1);
this.sound.setDecodedCallback(
[gg.fx],
this.start, this
);
其中 fx 是一个全局变量。然后,如果我需要播放音乐,我会做
fx.play(button.name);
代码有效,但我必须始终保留这个全局变量(或将其传递到我需要音乐的每个州)。
所以我有几个问题:
- 我不喜欢全局变量。有更好的方法吗?我计划制作大量效果,我希望有一种简单的方法来管理它们。
- 如果我没有使用全局变量并调用类似 this.sound.play("name") 的代码,它会说该文件不在缓存中。有没有办法将它添加到全局缓存?这是个坏主意吗?
谢谢!
- 全局变量:
您实际上可以在 myGame
上定义这些。虽然它使用不同的方式来定义这些,但请看一下 Full Screen Mobile Template that's part of the Phaser codebase itself. The creator of Phaser actually recommended this on their forums for declaring 'global' variables.
这给你这样的东西:
myGame.fx = game.add.audio('sfx');
// ...
- 全局缓存:
好问题。我发现的唯一一件事就是分解 MP3 文件并将它们分别加载到缓存中。这样你的缓存就有一个对象 name/key.
但是如果您将这些添加到 myGame
对象中,您应该能够将音频保存在一个文件中。