今日は爆睡していました。@It_is_Rです。
enchant.jsのロード画面はカッコわるいなとずっと思っていました。「あ、これenchant.jsで作ったんだな」って思われてしまうじゃないですか!別に良いんですけど。
これを変更したいと思うのは、Rだけではないはず。。。
実は、あのロード画面を変更する方法があるのを知っていますか?
今回はそのロード画面を変更する方法を、丁寧に解説していきたいと思います。
そのロード画面というのがこちらですね。
見るだけで、早くしろよと言いたくなります。これは画像ですよ、待ってても何も始まりません。
enchant.js、基本のプログラム。
enchant.jsで開発している場合、基本的なプログラムは以下の様になっていると思います。かなり省略していますが。。。
var ASSETS = [ /*使用する画像やサウンドなど。*/ ]; window.onload = function() { game = new Core(320,320); game.preload(ASSETS); game.fps = 23; game.onload = function() { /*ゲームの内容*/ }; game.start(); };
では、このプログラムを使って、ロード画面を画像に変更してみたいと思います。
enchant.jsのロード画面を画像に変更する。
では、早速画像に変更してみましょう。
ロード画面のシーンを作成する。
ロード画面を作る時は、まずロード画面のシーンを作成します。
var loadScene = new Scene();
と記述することで、loadSceneというシーンが作成されます。
シーンを作成したら、そのシーンでどのようにしたいかを、addEventListenerを使って作っていきます。
loadScene.addEventListener(‘progress’, function(e) {
});
を作って、この中に記述していきましょう。
使用する画像を用意します。
では、使用する画像を用意します。今回は単なる解説なので、かなりテキトーにマウスで描いた画像です。
文字は、プログラムで作ってもよかったのですが、今回は画像に直接書きました。この画像は大きいですが、実際に使ったのは320*320の大きさになおしています。
画像をロード画面に表示する
この画像をロード画面に表示してみましょう。以下のソースをaddEventListener内に書き込みます。
var loadImg = new Sprite(320,320); loadImg.image = game.assets['画像ファイル']; loadScene.addChild(loadImg);
更に、この画像ファイルをあらかじめ読み込んでおきたいので、addEventListenerの前に、game.preload(‘画像ファイル’);を記述します。
最後に、game.loadingSceneの中にloadSceneを入れてやります。つまり、元々のロード画面に上書きしてあげるわけです。
game.loadingScene = loadScene;
これで、画像を表示させることができます。
しかし、これではどれだけ待ってもロード画面からゲームへと切り替わりません!
そこで、以下のプログラムを追加します。
loadScene.addEventListener('load', function(e) { var core = enchant.Core.instance; core.removeScene(core.loadingScene); core.dispatchEvent(e); });
これまでの、全体のコードはこうなりました。
var ASSETS = [ /*使用する画像やサウンドなど。*/ ]; window.onload = function() { game = new Core(320,320); var loadScene = new Scene(); game.loadingScene = loadScene; game.preload('画像ファイル'); loadScene.addEventListener('progress', function(e) { var loadImg = new Sprite(320,320); loadImg.image = game.assets['画像ファイル']; loadScene.addChild(loadImg); }); loadScene.addEventListener('load', function(e) { var core = enchant.Core.instance; core.removeScene(core.loadingScene); core.dispatchEvent(e); }); game.preload(ASSETS); game.fps = 23; game.onload = function() { /*ゲームの内容*/ }; game.start(); };
このように、好きな画像に変更してあげれば、カッコいいロード画面が作れる訳です。
ロードの状況を表示する。
でも、ただ画像を表示するだけでは、ゲームをプレイする人が、ほんとに読み込まれてるのかよと不安になります。
そこで、ロードの状況も表示してみましょう。
以下のコードは、ロードの状況を変数に代入する為の命令です。
var progress = e.loaded / e.total; progress *= 100; progress = Math.round(progress);
var progress = e.loaded / e.total;で、どれだけロードができたかを変数に入力できるのですが、これは小数点まで表示されてしまいます。
なので、100をかけて%表示にしてから、progress = Math.round(progress);で、四捨五入しています。
では、プログラムを作ってみましょう。
var ASSETS = [ /*使用する画像やサウンドなど。*/ ]; window.onload = function() { game = new Core(320,320); var loadScene = new Scene(); game.loadingScene = loadScene; game.preload('画像ファイル'); loadScene.addEventListener('progress', function(e) { var progress = e.loaded / e.total; progress *= 100; progress = Math.round(progress); var loadImg = new Sprite(320,320); loadImg.image = game.assets['画像ファイル']; loadScene.addChild(loadImg); var label = new Label(); label.moveTo(200,290); label.text = "LOADING..." + progress; label.color = 'white'; loadScene.addChild(label); }); loadScene.addEventListener('load', function(e) { var core = enchant.Core.instance; core.removeScene(core.loadingScene); core.dispatchEvent(e); }); game.preload(ASSETS); game.fps = 23; game.onload = function() { /*ゲームの内容*/ }; game.start(); };
ここまできて、「読み込み中です。」の必要なさに気がつきました。