enchant.jsでゲーム制作を
   はじめてみよう
         「パンダの会」バージョン




        2012.9.15
     「パンダの会」 その七

   3panda(Ryota Shiroguchi)
私について
● @3panda

● 仕事はHTMLとかCSS触ってます。

● プログラムは 苦手です。

● ファミコン世代です。

● パンダが大好きです。
このお話の流れ

● enchant.jsについて

● スタートアップ

● ゲーム的な動きをつくる(デモ&解説)

● ゲームを作ってみました!

● まとめ
enchant.jsについて
enchant.jsとは
● ゲームエンジン

● HTML5 + JavaScript

● クロスプラットフォーム

● 日本製(株式会社ユビキタスエンターテインメントが公開)
enchant.jsの良いところ
● スタートアップが楽ちん

● サンプルが豊富

● ドキュメントが日本語

● 公式のプラグインも豊富
スタートアップ
スタートアップ HTML
<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, user-scalable=no">
    <meta name="apple-mobile-web-app-capable" content="yes">
    <meta name="apple-mobile-web-app-status-bar-style" content="black-translucent">
    <title>enchant</title>
    <script type="text/javascript" src="enchant.js"></script>
    <script type="text/javascript" src="game.js"></script>
    <style type="text/css">
       body {
          margin: 0;
       }
    </style>
  </head>
  <body>
  </body>
</html>
スタートアップ HTML
<!DOCTYPE html>
<html>
  <head>                                              enchant.js          を読み込む
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, user-scalable=no">
    <meta name="apple-mobile-web-app-capable" content="yes">
    <meta name="apple-mobile-web-app-status-bar-style" content="black-translucent">
    <title>enchant</title>
    <script type="text/javascript" src="enchant.js"></script>
    <script type="text/javascript" src="game.js"></script>
    <style type="text/css">
       body {
          margin: 0;
       }
    </style>                 実行用jsファイル を読み込む。             ※
  </head>
  <body>                     HTMLに直接記述も可能。
  </body>
</html>                          ※今回はgame.jsとしていますが何でもOK
スタートアップ game.js
enchant();
window.onload=function(){
 var game = new Game(320, 320);
   //ここで初期化
 game.onload = function(){
   //ここにゲーム処理を書く
 }
 game.start();
}
スタートアップ game.js
                   enchantのお約束!
enchant();
                                  JavaScriptのお約束!
window.onload=function(){
 var game = new Game(320, 320);
   //ここで初期化
 game.onload = function(){
   //ここにゲーム処理を書く
 }
 game.start();
}
スタートアップ game.js
                                  ゲーム(オブジェクト)を生成
enchant();
window.onload=function(){
 var game = new Game(320, 320);
   //ここで初期化
 game.onload = function(){
   //ここにゲーム処理を書く                      ゲーム中の処理
 }
 game.start();
}
  ゲームをスタート!
ゲーム的な動きをつくる
ゲーム的な動きを作る

● まずはキャラの配置
● キャラを動かす
● ステージを配置する
● 当たり判定
● ゲームスタート&ゲームオーバー
● コントローラーの設置(タッチデバイス用)
まずはキャラの配置 




       クマさん
まずはキャラの配置 game.js
var game = new Game(320, 320);
  game.fps = 24;
    game.preload('chara1.gif');
    game.onload = function(){
  //キャラクター
    var bear = new Sprite(32, 32);
    bear.image = game.assets['chara1.gif'];
    //rootSceneに追加
    game.rootScene.addChild(bear);
 }
 game.start();
}
まずはキャラの配置 game.js
                                フレームレートの設定
var game = new Game(320, 320);
    game.fps = 24;                       画像のプリロード
    game.preload('chara1.gif');
    game.onload = function(){            スプライトの生成
  //キャラクター
    var bear = new Sprite(32, 32);
    bear.image = game.assets['chara1.gif'];
    //rootSceneに追加
    game.rootScene.addChild(bear);          画像の指定
 }
 game.start();
                   ※ルートシーンに追加
}
デモ
キャラを動かす




          クマさん走る
キャラを動かす

//bearの動きの設定 イベントはフレーム毎
bear.addEventListener(Event.ENTER_FRAME,
function() {
    //左
    if (game.input.left) {
         this.x -= 3;
         this.scaleX = -1;
    }
    //・・・省略・・・
});
キャラを動かす                 キャラにイベントリスナーを追加



//bearの動きの設定 イベントはフレーム毎
bear.addEventListener(Event.ENTER_FRAME,
function() {
    //左
    if (game.input.left) {
         this.x -= 3;
         this.scaleX = -1;
    }
    //・・・省略・・・
});
キャラを動かす

//bearの動きの設定 イベントはフレーム毎
bear.addEventListener(Event.ENTER_FRAME,
function() {
    //左
    if (game.input.left) {
                           イベントはフレーム毎
         this.x -= 3;
         this.scaleX = -1;
    }
    //・・・省略・・・
});
デモ
ステージを配置する
ステージを配置する
//MAPを表示させる
var blocks = [
   [ -1, -1,//省略// -1, -1, -1, -1 ],
   ////////////////省略/////////////////////
   [ 0, 0, 0, 0,//省略// 0, 0, 0, 0 ],
   [ 1, 1, 1, 1,//省略// 1, 1, 1, 1 ]
];
var map = new Map(16, 16);
map.image = game.assets["map2.gif"];
map.loadData(blocks);
ステージを配置する                     配列で表示する画像を管
                                   理
//MAPを表示させる
var blocks = [                        タイルの一コマづつ敷き
   [ -1, -1,//省略// -1, -1, -1, -1 ],    詰めるように配置。
   ////////////////省略/////////////////////
   [ 0, 0, 0, 0,//省略// 0, 0, 0, 0 ],
   [ 1, 1, 1, 1,//省略// 1, 1, 1, 1 ]
];
var map = new Map(16, 16);
map.image = game.assets["map2.gif"];
map.loadData(blocks);
ステージを配置する
//MAPを表示させる
var blocks = [
   [ -1, -1,//省略// -1, -1, -1, -1 ],
   ////////////////省略/////////////////////
                                     Map(オブジェクト)を生成
   [ 0, 0, 0, 0,//省略// 0, 0, 0, 0 ],
   [ 1, 1, 1, 1,//省略// 1, 1, 1, 1 ]
];                                          画像の指定
var map = new Map(16, 16);
map.image = game.assets["map2.gif"];
map.loadData(blocks);

                                    配列を呼び出し配置
ステージを配置する




        map2.gif
ステージを配置する




   生成したオブジェクトのサイズで
      配列として扱える
ステージを配置する

 game.onload = function(){

     //---------------省略-------------------//

     //rootSceneに追加
     game.rootScene.addChild(bear);
     game.rootScene.addChild(map);
 }
                              ※ルートシーンに追加
 game.start();
}                              ※オブジェクトは
                             シーンに追加する事で表示
デモ
実はクマさんも・・・




         chara1.gif
実はクマさんも・・・
                     サイズ(32,32)




      「chara1.gif」を切り出して
          呼び出している
実はクマさんも・・・
                   デフォルトは0(1番目)




         「bear.frame = 番号」
      で何番目を表示するか指定する。
当たり判定




        当たった!!!
当たり判定
//星を表示
var star = new Sprite(16, 16);
star.image = game.assets['icon0.gif'];
star.frame = [30];

//-------------------省略--------------------//

//星との当たり判定
   if(this.within(star, 15)) {
   label.text = '当たった!';
   this.frame = 3;
}
当たり判定                                    キャラを一つ追加


//星を表示
var star = new Sprite(16, 16);
star.image = game.assets['icon0.gif'];
star.frame = [30];

//-------------------省略--------------------//

//星との当たり判定
   if(this.within(star, 15)) {
   label.text = '当たった!';
   this.frame = 3;
}
当たり判定
//星を表示
var star = new Sprite(16, 16);
star.image = game.assets['icon0.gif']; 当たり判定の処理
star.frame = [30];                     intersect,またはwithin
                                        メソッドを利用。※
//-------------------省略--------------------//

//星との当たり判定
   if(this.within(star, 15)) {      ※補足
   label.text = '当たった!';            ・intersec()では矩形同士の距離
                                    ・within()では中心からの距離
   this.frame = 3;
}
デモ
ゲームスタート&ゲームオーバー
ゲームスタート&ゲームオーバー




   ゲームスタートとゲームオーバーの
        画像を用意
ゲームスタート&ゲームオーバー




   (注意)HTMLファイルと同じ階層に
         置きましょう。
ゲームスタート&ゲームオーバー




     ゲームスタートは画像を
      用意するだけでOK
ゲームスタート&ゲームオーバー HTML

<html>
//-------------------省略--------------------//
<head>
<script type="text/javascript" src="enchant.js"></script>
<script type="text/javascript" src="nineleap.enchant.js"></script>
<script type="text/javascript" src="game.js"></script>
//-------------------省略--------------------//
</html>

                nineleap.enchant.jsを読み込む
ゲームスタート&ゲームオーバー

//星を表示
var star = new Sprite(16, 16);
star.image = game.assets['icon0.gif'];

//-------------------省略--------------------//

//星との当たり判定
   if(this.within(star, 15)) {       ゲームオーバーの
   this.frame = 3;                      処理
   game.end();
}
デモ
コントローラーの設置(タッチデバイス用)
コントローラーの設置(タッチデバイス用)




          pad.png
コントローラーの設置(タッチデバイス用)




    (注意)HTMLファイルと同じ階層に
          置きましょう。
コントローラーの設置(タッチデバイス用)

<html>
//-------------------省略--------------------//
<head>
<script type="text/javascript" src="enchant.js"></script>
<script type="text/javascript" src="ui.enchant.js"></script>
<script type="text/javascript" src="game.js"></script>
//-------------------省略--------------------//
</html>

                    ui.enchant.jsを読み込む
コントローラーの設置(タッチデバイス用)

game.onload = function() {
//-------------------省略--------------------//

// バーチャルキーパッドを生成                   バーチャルキーパッドを生
var pad = new Pad();                    成
pad.moveTo(0, 220);

//-------------------省略--------------------//
コントローラーの設置(タッチデバイス用)

game.onload = function() {
//-------------------省略--------------------//

// バーチャルキーパッドを生成
var pad = new Pad();
pad.moveTo(0, 220);

//-------------------省略--------------------//
                                     バーチャルキーパッドを配
                                              置
デモ
ゲームを作って
 みました!
デモ
なんとかゲーム  が
       ぽいもの

  出来ました!
まとめ
まとめ
● スタートアップがらくちん

● 必要なものがそろっている

● 少ないコードでゲームが作れる

● プログラムの学習にも最適
ありがとうございました
さらに詳しい解説は
● 公式サイトのサンプルコード
● code9leap
● ドットインストール
● enchant.js プログラミング入門の資料
● tl.enchant.jsの解説
● JavaScriptベースゲームエンジン徹底比較

enchant.jsでゲーム制作をはじめてみよう 「パンダの会」バージョン