久しぶりに、Javascriptゲームエンジン「enchant.js」に触れてみる – Information Teaching Service 雄飛

久しぶりに、Javascriptゲームエンジン「enchant.js」に触れてみる

こんばんは、脇保です。

今回は、久しぶりに、enchant.jsに触れてみました。
ブログ内では初ですが、4年程前にenchant.jsをいじったことがあり。

因みに、その作品というのがこちら。
http://9leap.net/games/1527

その懐かしさから、久しぶりにゲームでも作ろうかと。

その前に、「enchant.js」とは何??

公式サイト
http://enchantjs.com/ja/

で、作ったゲームを、この9Leapってところに投稿できます。
http://9leap.net/

因みに、「enchant.js」は、JavaScriptで記述されています。
ほかにも、HTML5や、CSS3をふんだんに使っています。

資料やサンプル、様々なブログ等で扱われているので、
サンプルには困らないと思います。

また、実際問題、JavaScriptを簡単に記述できると思います。
(特に、プログラム初心者には。)

さて、話は戻って・・・。

ゲームエンジンですので、まずは本体となるライブラリが必要です。
公式サイトhttp://enchantjs.com/ja/から、
「Dwonload」をクリックして、「enchant.js」をゲットします。

ダウンロードしたら、解凍し、
「enchant.js-builds-「バージョン番号」examplesbeginnerhellobear」
と、辿っていきます。

今回は、感覚慣らしも含めて、「hellobear」という、
一番簡単なサンプルに手を付けます。

で、「index.html」を実行します。

index.htmlを開くと、しろくまが、左から右へ、歩いて消えていったと思います。

これに、色んなモーションを付けて行きます。

さて、お次は編集用エディタ。

エディタは人それぞれお好きなものを。

私、脇保は自作エディタを使ってたりしますが、
が、本格的に何かするときは、やっぱりエディタは必要です。
そんな時は取り合えず、MicroSoft Visual Studio Codeを使ってます。

https://www.microsoft.com/ja-jp/dev/products/code-vs.aspx

Mac、Windows、Linuxでも動くので、まぁ、便利です。
もっとも、Linuxでは、geditが好みだったりしますが。

エディタは、本当にいろんな種類があるので、探してググってみると、
いいと思います。

例えば、サクラエディタとか、有料だけどWebStormだとか。
少々重たいけど、javaで有名な「ecripse」も、
JavaScriptに対応したのが、あった筈。

Linuxだと、Vimとか、そこら辺が有名だったりしますね。
私は使いこなせませんが・・・。
(いや、gedit・・・(マテ))

さて、本題。お好みのエディタが見つかったら、
早速、エディタに慣れながら、コードを開いていきます。

開くのは、「index.html」と、「main_nocomment.js」、「main.js」、
計3つです。

「main.js」は、コメントが豊富にあるので、理解がしやすいです。
これを参考にしながら、

「main_nocomment.js」は、その名の通りコメントなしバージョン。
こちらを編集します。

編集した結果は以下になります。

やった事は、
・開始時、ランダムな箇所に出現させる。
・ダッシュの際の加速具合を付けた
・往復させる
・往復したらキャラを反転させる
・壁にぶつかったら、泣く
・ある程度走ったら、疲れて止まる
・疲れそうになったら減速しだす

です。

これで、キャラ移動の基本は(物凄い粗削りだけど)出来たと思う。
あと、省略とか、短縮しないて、業とかなり長めのコードにしました。
他、技術不足で長くなった箇所もあるかと思いますが・・・。

何分、久しぶりなので、すいませんです、ハイ。

時間があったらこれをクラス化して、
敵キャラとか、自キャラとかに、流用できるようにします。

以下のコードが、サンプルに手を食わえたものになります。
これを、「main_ouhuku.js」と命名して、同自フォルダに保存します。

それに合わせて、HTMLもいじります。下参照。

この2ファイルを編集し、解凍し、上で指定した、
フォーカスがあるフォルダに保存し、「index.html」を実行すれば、
ユーモラスなくまさんがちょこまかと往復して走っていると思います。

参考にしたサイト
[enchant.js]往復移動処理(キャラクターの画像反転)
http://d.hatena.ne.jp/nakamura001/20110503/1304432316

JavaScriptでランダムの数(乱数)を作る方法
https://syncer.jp/javascript-reverse-reference/create-random-number

それでは。

以下、ソース。

//main_ouhuku.js
enchant();

window.onload = function(){
    kabe = 320;//追加
    //var game = new Core(320, 320); //コメントアウト
    var game = new Core(kabe, kabe); //追加
    game.fps = 15;
    game.preload(“chara1.png”);
    game.onload = function(){
        var bear = new Sprite(32, 32);
        var speed = 1;       //追加  加速度変数
        var mothion = true;  //追加  モーション管理変数
        var moving_x = true; //追加  移動向き管理変数
        var itai_flg = false;//追加  壁にぶつかった?痛いよ変数
        var itai_timer = 0;  //追加  壁にぶつかって泣いている時間
        var tukareta_timer = 0; //追加  疲れるまでの時間をカウント
        var tukareta = 60;      //追加  疲れた変数。この値に達すると疲れる
        var kaihuku = 70;       //追加  回復変数。この値に達すると走り出す
        var tukaresou = 8;     //追加 疲れそうな雰囲気を示す値
        var kuma_stop = 5;     //追加 止まっているくま
        var kuma_run = 6;      //追加 走るくま
        var kuma_itai = 8;     //追加  泣いているくま
        bear.image = game.assets[“chara1.png”];
        //bear.x = 0;  //コメントアウト
        //bear.y = 0;  //コメントアウト
        //bear.frame = 5;  //コメントアウト
        bear.x = Math.floor( Math.random() * kabe ) +1;    //追加
        bear.y = Math.floor( Math.random() * kabe ) +1;    //追加
        bear.frame = kuma_stop; //追加

        game.rootScene.addChild(bear);

        bear.addEventListener(“enterframe”, function(){

            //this.x += 1;  //コメントアウト

            //ここから
            tukareta_timer++; //疲れるたタイマーをカウント

            //壁にぶつかってない 又は 疲れてない 状態の時に運動動作
            if ( ( itai_flg == false ) || ( tukareta_timer <= tukareta ) ) {
              //TrueとForseを繰り返し、値(mothion)に0と1を交互に入れる
              if ( mothion == true ) {
                mothion = false;
              } else {
                mothion = true;
              };
            };

            //疲れそうになったら減速
            if ( tukareta_timer >= tukareta -tukaresou ) {
              if ( moving_x == true ) {
                speed += -1;
              } else {
                speed += 1;
              }
            };

            //疲れたら回復するまで停止
            if ( ( tukareta_timer >= tukareta ) && (tukareta_timer <= kaihuku ) ) {
              this.x = this.x;
              bear.frame = kuma_stop;
            } else {
              if ( tukareta_timer >= tukareta ) {
                tukareta_timer = 0;
                speed = 0;
              }
              this.x += speed;
              this.frame = kuma_run + mothion;
            };

            //壁にぶつかったら泣きながら方向転換
            if ( this.x > kabe ) {
              bear.x = kabe -5;
              speed = 0;
              moving_x = false;
              this.scaleX *= -1;
              itai_flg = true;
              itai_timer = 1;

            } else if ( this.x < 0 ) {
              bear.x = 5;
              speed = 0;
              moving_x = true;                                    
              this.scaleX *= -1;
              itai_flg = true;
              itai_timer = 1;
            };

            //移動する方向を管理
            if ( moving_x == true ) {
              speed++;
              this.x = this.x + speed;
            } else {
              speed–;
            };

             //痛いとなったら、泣き止むまで泣き続ける。
             if ( ( itai_flg == true ) && ( itai_timer > 0 ) && ( itai_timer < 10 )  ) {
               itai_timer++;
               this.frame = kuma_itai;
             } else {
               itai_timer = 0;
               itai_flg == false;
             };
            //ここまで追加

            //this.frame = this.age % 2 + 6; //コメントアウト
        });

        bear.addEventListener(“touchstart”, function(){
            game.rootScene.removeChild(bear);
        });
    };
    game.start();
};

以下の行を、
<script type=”text/javascript” src=”main.js”></script>
この様に変更します。
<script type=”text/javascript” src=”main_ouhuku.js”></script>
ここから下が、「index.html」HTML。
<!DOCTYPE html>
<html>
<head>
    <meta charset=”UTF-8″>
    <meta http-equiv=”x-ua-compatible” content=”IE=Edge”>
    <meta name=”viewport” content=”width=device-width, user-scalable=no”>
    <meta name=”apple-mobile-web-app-capable” content=”yes”>
    <script type=”text/javascript” src=”../../../build/enchant.js”></script>
    <script type=”text/javascript” src=”main_ouhuku.js”></script>
    <style type=”text/css”>
        body {
            margin: 0;
            padding: 0;
        }
    </style>
</head>
<body>
</body>
</html>

コメントをどうぞ

メールアドレスが公開されることはありません。 が付いている欄は必須項目です