SlideShare a Scribd company logo
enchant.js
チュートリアル
  UEI/ARC Makoto Kondo
自己紹介

株式会社ユビキタスエンターテインメント

ARC 秋葉原リサーチセンター研究員

プログラマ(iOS/Android/i-modeなど)
enchant.jsを使って
シューティングゲーム
   を作ろう!
有名なSTG




 ゼビウス      グラディウス      R-TYPE
ナムコ 1982   コナミ 1985   アイレム 1987
シューティングゲームには、
 最低限何が必要か?
共通点は?




 ゼビウス      グラディウス      R-TYPE
ナムコ 1982   コナミ 1985   アイレム 1987
1.自機がいる




 ゼビウス      グラディウス      R-TYPE
ナムコ 1982   コナミ 1985   アイレム 1987
2.敵機がいる




 ゼビウス      グラディウス      R-TYPE
ナムコ 1982   コナミ 1985   アイレム 1987
3.弾を撃てる




 ゼビウス      グラディウス      R-TYPE
ナムコ 1982   コナミ 1985   アイレム 1987
4.弾で敵を倒せる




 ゼビウス      グラディウス      R-TYPE
ナムコ 1982   コナミ 1985   アイレム 1987
5.ゲームオーバーがある




 ゼビウス      グラディウス      R-TYPE
ナムコ 1982   コナミ 1985   アイレム 1987
6.スコアがある




 ゼビウス      グラディウス      R-TYPE
ナムコ 1982   コナミ 1985   アイレム 1987
必要な要素(a.k.a.仕様)
1. 自機がでる

2. 敵がでる

3. 弾を撃てる

4. 弾で敵を倒せる

5. ゲームオーバーになる

6. スコアがある
もう少し細かく
1. 自機がでる        0.enchant.js初期化

2. 敵がでる         1.1自機を動かす

3. 弾を撃てる
                 2.1敵を動かす
4. 弾で敵を倒せる
                 3.1弾を動かす
5. ゲームオーバーになる

6. スコアがある
まとめると、、、
あなたがシューティングゲームを
         作るのに必要なたった10個の要素                625 users



       1. enchant.js初期化      6. 弾を撃つ

       2. 自機を出す              7. 弾で敵を倒す

       3. 自機を動かす             8. 敵をたくさん出す

       4. 敵を出す               9. ゲームオーバーを作る

       5. 敵を動かす              10.スコアを出す
http://chephes.com/meetup/
あなたがシューティングゲームを
         作るのに必要なたった10個の要素                625 users



       1. enchant.js初期化      6. 弾を撃つ

       2. 自機を出す              7. 弾で敵を倒す

       3. 自機を動かす             8. 敵をたくさん出す

       4. 敵を出す               9. ゲームオーバーを作る

       5. 敵を動かす              10.スコアを出す
http://chephes.com/meetup/
1.enchant.js初期化
1.enchant.js初期化
1. 好きな場所にフォルダを作る

2. フォルダの中にenchant.jsを入れる

3. 以下のファイルを作る

• index.html
• main.js
1.enchant.js初期化
    index.html
<html>
<head>
<script type=‘text/javascript’ src=‘enchant.js’></script>
<script type=‘text/javascript’ src=‘main.js’></script>
</head>
</html>

   main.js
enchant();
window.onload=function(){
   var game=new Game(320, 320);
   game.onload=function(){
      console.log(‘Hello, enchant.js!!’);
   };
   game.start();
};
1.enchant.js初期化
4. ブラウザにindex.htmlをドラッグ&ドロップ
1.enchant.js初期化
5. ブラウザのjavascriptコンソールを開く
1.enchant.js初期化
6. コンソールにHello, enchant.js!!と表示される
1.enchant.js初期化
   main.js
enchant();
window.onload=function(){
   var game=new Game(320, 320);
   game.onload=function(){
      console.log(‘Hello, enchant.js!!’);
   };
   game.start();
};
1.enchant.js初期化
   main.js
enchant();
window.onload=function(){
   var game=new Game(320, 320);
                                       enchant.jsの読み込み
   game.onload=function(){
      console.log(‘Hello, enchant.js!!’);   (おまじない)
   };
   game.start();
};
1.enchant.js初期化
   main.js
enchant();
window.onload=function(){
   var game=new Game(320, 320);
   game.onload=function(){
                                            ページ読み込み
      console.log(‘Hello, enchant.js!!’);
   };                                       完了の処理の設定
   game.start();
};
1.enchant.js初期化
   main.js
enchant();
window.onload=function(){
   var game=new Game(320, 320);
   game.onload=function(){
      console.log(‘Hello, enchant.js!!’);   実際の処理
   };
   game.start();
};
1.enchant.js初期化
   main.js
enchant();
window.onload=function(){
   var game=new Game(320, 320);         Gameクラスの初期化
   game.onload=function(){
      console.log(‘Hello, enchant.js!!’);
   };
   game.start();
};
1.enchant.js初期化
Gameクラス
1.enchant.js初期化
Gameクラス
1.enchant.js初期化
クラスとは?
1.enchant.js初期化
クラスとは?




         Game
1.enchant.js初期化
クラスとは?

Sprite
         Game
1.enchant.js初期化
クラスとは?

Sprite
         Game

Label
1.enchant.js初期化
クラスとは?

Sprite          Scene
         Game

Label
1.enchant.js初期化
クラスとは?

Sprite            Scene
         Game

Label           Surface
1.enchant.js初期化
   クラスとは?

データと関連する処理をひとまとめにした、意味の
ある一つのまとまり。
enchant.jsには、Game, Sprite, Labelなどいろいろな
クラスが存在する。
1.enchant.js初期化
Gameクラスが持つデータ
1.enchant.js初期化
Gameクラスが持つ処理
1.enchant.js初期化
     クラスの定義方法
enchant();
var MyClass = Class.create({
  initialize:function(){
    console.log(‘My Class Init’);
  },
  myMethod:function(){
    console.log(‘My Method’);
  }
});

var myInstance = new MyClass();
myInstance.myMethod();
1.enchant.js初期化
     クラスの定義方法
                                    クラスの生成
enchant();
var MyClass = Class.create({
  initialize:function(){
    console.log(‘My Class Init’);
  },
  myMethod:function(){
    console.log(‘My Method’);
  }
});

var myInstance = new MyClass();
myInstance.myMethod();
1.enchant.js初期化
     クラスの定義方法
enchant();
var MyClass = Class.create({
  initialize:function(){
    console.log(‘My Class Init’);
  },
  myMethod:function(){
    console.log(‘My Method’);       親クラス
  }
});

var myInstance = new MyClass();
myInstance.myMethod();
1.enchant.js初期化
     クラスの定義方法
enchant();
var MyClass = Class.create({
  initialize:function(){
    console.log(‘My Class Init’);
  },
  myMethod:function(){
    console.log(‘My Method’);       コンストラクタ
  }
});

var myInstance = new MyClass();
myInstance.myMethod();
1.enchant.js初期化
     クラスの定義方法
enchant();
var MyClass = Class.create({
  initialize:function(){
    console.log(‘My Class Init’);
  },
  myMethod:function(){
    console.log(‘My Method’);
  }                                 メソッドの定義
});

var myInstance = new MyClass();
myInstance.myMethod();
1.enchant.js初期化
   main.js
enchant();
window.onload=function(){
   var game=new Game(320, 320);
   game.onload=function(){                  Gameクラスの
      console.log(‘Hello, enchant.js!!’);
   };
   game.start();                            初期化完了の処理
};
1.enchant.js初期化
   main.js
enchant();
window.onload=function(){
   var game=new Game(320, 320);
   game.onload=function(){
      console.log(‘Hello, enchant.js!!’);   ゲームの処理
   };
   game.start();
};
1.enchant.js初期化
   main.js
enchant();
window.onload=function(){
   var game=new Game(320, 320);
   game.onload=function(){
      console.log(‘Hello, enchant.js!!’);
   };
   game.start();                            ゲームの開始
};
1.enchant.js初期化
 Game.start()

ゲームを開始する. enchant.Game#fpsで設定された
フレームレートに従ってenchant.Game#currentScene
のフレームの更新が行われるようになる.
プリロードする画像が存在する場合はロードが始まり
ローディング画面が表示される.
1.enchant.js初期化
あなたがシューティングゲームを
         作るのに必要なたった10個の要素                625 users



       1. enchant.js初期化      6. 弾を撃つ

       2. 自機を出す              7. 弾で敵を倒す

       3. 自機を動かす             8. 敵をたくさん出す

       4. 敵を出す               9. ゲームオーバーを作る

       5. 敵を動かす              10.スコアを出す
http://chephes.com/meetup/
2.自機を出す
     1. enchant.jsに同梱のchara1.gifをフォルダに入れる

     2. main.jsを以下のように書き換える
   main.js
enchant();
window.onload=function(){
   var game=new Game(320, 320);
  game.preload(‘chara1.gif’);
   game.onload=function(){
     var player=new Sprite(32, 32);
     player.image=game.assets[‘chara1.gif’];
     game.rootScene.addChild(player);
   };
   game.start();
};
2.自機を出す
3. ブラウザのキャッシュを消す
2.自機を出す
4. ブラウザをリロード
2.自機を出す
4. ブラウザをリロード




          自機がでた
2.自機を出す
   main.js
enchant();
window.onload=function(){
   var game=new Game(320, 320);
  game.preload(‘chara1.gif’);
   game.onload=function(){
     var player=new Sprite(32, 32);
     player.image=game.assets[‘chara1.gif’];
     game.rootScene.addChild(player);
   };
   game.start();
};
2.自機を出す
   main.js
enchant();
window.onload=function(){             画像の読み込み
   var game=new Game(320, 320);
  game.preload(‘chara1.gif’);
   game.onload=function(){
     var player=new Sprite(32, 32);
     player.image=game.assets[‘chara1.gif’];
     game.rootScene.addChild(player);
   };
   game.start();
};
2.自機を出す
 game.preload(‘chara1.gif’)とは?
wise9-enchant.js-..../doc/ja/index.html
2.自機を出す
 game.preload(‘chara1.gif’)とは?
enchant.Gameをクリック
2.自機を出す
 game.preload(‘chara1.gif’)とは?
enchant.Game.preloadをさがす
2.自機を出す
game.preload(‘chara1.gif’)とは?
説明文を読んでみる




                                サンプル
2.自機を出す
   main.js
enchant();
window.onload=function(){
   var game=new Game(320, 320);
  game.preload(‘chara1.gif’);
   game.onload=function(){
     var player=new Sprite(32, 32);
     player.image=game.assets[‘chara1.gif’];
     game.rootScene.addChild(player);
   };
   game.start();
};
2.自機を出す
   main.js
enchant();
window.onload=function(){
   var game=new Game(320, 320);
  game.preload(‘chara1.gif’);
   game.onload=function(){
     var player=new Sprite(32, 32);
                                               自機の生成
     player.image=game.assets[‘chara1.gif’];
     game.rootScene.addChild(player);
   };
   game.start();
};
2.自機を出す
var player=new Sprite(32, 32);
2.自機を出す
var player=new Sprite(32, 32);
2.自機を出す
var player=new Sprite(32, 32);
2.自機を出す
var player=new Sprite(32, 32);
2.自機を出す
var player=new Sprite(32, 32);




                  =32
2.自機を出す
var player=new Sprite(32, 32);




                  =32
2.自機を出す
var player=new Sprite(32, 32);




                  =32
                  =32
2.自機を出す
var player=new Sprite(32, 32);




                  =32       32




                                 32
                  =32
2.自機を出す
   main.js
enchant();
window.onload=function(){
   var game=new Game(320, 320);
  game.preload(‘chara1.gif’);
   game.onload=function(){
     var player=new Sprite(32, 32);
     player.image=game.assets[‘chara1.gif’];

   };
     game.rootScene.addChild(player);          画像の設定
   game.start();
};
2.自機を出す
player.image=game.assets[‘chara1.gif’];
2.自機を出す
player.image=game.assets[‘chara1.gif’];
2.自機を出す
player.image=game.assets[‘chara1.gif’];
2.自機を出す
player.image=game.assets[‘chara1.gif’];
2.自機を出す
player.image=game.assets[‘chara1.gif’];
2.自機を出す
player.image=game.assets[‘chara1.gif’];




     ロードされたchara1.gifを
    playerの画像として表示する
2.自機を出す
   main.js
enchant();
window.onload=function(){
   var game=new Game(320, 320);
  game.preload(‘chara1.gif’);
   game.onload=function(){
     var player=new Sprite(32, 32);
     player.image=game.assets[‘chara1.gif’];
     game.rootScene.addChild(player);
   };

};
   game.start();
                                       シーンに追加して表示
2.自機を出す
        game.rootScene.addChild(player);
enchant.Game              enchant.Scene




enchant.Group
2.自機を出す
        game.rootScene.addChild(player);
enchant.Game              enchant.Scene




enchant.Group
2.自機を出す
        game.rootScene.addChild(player);
enchant.Game              enchant.Scene




enchant.Group
2.自機を出す
        game.rootScene.addChild(player);
enchant.Game              enchant.Scene




enchant.Group
2.自機を出す
        game.rootScene.addChild(player);
enchant.Game              enchant.Scene




enchant.Group
2.自機を出す
        game.rootScene.addChild(player);
enchant.Game              enchant.Scene




enchant.Group




        Gameの表示ツリーにplayerを追加する
あなたがシューティングゲームを
         作るのに必要なたった10個の要素                625 users



       1. enchant.js初期化      6. 弾を撃つ

       2. 自機を出す              7. 弾で敵を倒す

       3. 自機を動かす             8. 敵をたくさん出す

       4. 敵を出す               9. ゲームオーバーを作る

       5. 敵を動かす              10.スコアを出す
http://chephes.com/meetup/
3.自機を動かす
        1. main.jsを以下のように書き換える

      main.js
enchant();
window.onload=function(){
    //...中略...
       player.image=game.assets[‘chara1.gif’];
       game.rootScene.addChild(player);
       game.rootScene.addEventListener(‘touchstart’, function(e){
         player.y=e.y;
       });
     };
     game.start();
};
3.自機を動かす
2. ブラウザのキャッシュを消す
3.自機を動かす
3. ブラウザをリロード
3.自機を動かす
4. 画面をクリック
3.自機を動かす
4. 画面をクリック
3.自機を動かす
      main.js
enchant();
window.onload=function(){           画面のタッチの処理の設定
    //...中略...
       player.image=game.assets[‘chara1.gif’];
       game.rootScene.addChild(player);
       game.rootScene.addEventListener(‘touchstart’, function(e){
         player.y=e.y;
       });
     };
     game.start();
};
3.自機を動かす
 EventTarget.addEventListener(type, listener);

イベントリスナを追加する。typeに
は‘enterframe’や‘touchstart‘などが利用でき、それらの
イベントが起きたときに、listenerを実行する。
EventTargetを継承するSpriteやSceneなど様々なクラ
スから利用可能
3.自機を動かす
      main.js
enchant();
window.onload=function(){
    //...中略...
       player.image=game.assets[‘chara1.gif’];
       game.rootScene.addChild(player);
       game.rootScene.addEventListener(‘touchstart’, function(e){
         player.y=e.y;
       });
     };

};
     game.start();
                                    タッチされたときの処理
3.自機を動かす
 Node.y
Nodeのy座標の値。読み込む事も、書き込む事も可能
である。yのプロパティはSpriteが継承しているNodeに
て定義されているので、Spriteでも利用可能
3.自機を動かす
      main.js
enchant();
window.onload=function(){
    //...中略...
       player.image=game.assets[‘chara1.gif’];
       game.rootScene.addChild(player);
       game.rootScene.addEventListener(‘touchstart’, function(e){
         player.y=e.y;
       });
     };
     game.start();
};
あなたがシューティングゲームを
         作るのに必要なたった10個の要素                625 users



       1. enchant.js初期化      6. 弾を撃つ

       2. 自機を出す              7. 弾で敵を倒す

       3. 自機を動かす             8. 敵をたくさん出す

       4. 敵を出す               9. ゲームオーバーを作る

       5. 敵を動かす              10.スコアを出す
http://chephes.com/meetup/
4.敵を出す
 1. enchant.jsに同梱のchara2.gifをフォルダに入れる

 2. main.jsを以下のように書き換える
main.js
//...中略...
game.preload(‘chara1.gif’, ‘chara2.gif’);
//...中略...
game.rootScene.addChild(player);
var enemy = new Sprite(32, 32);
enemy.image = game.assets[‘chara2.gif’];
enemy.x = 320 - 32;
enemy.y = 320 * Math.random();
game.rootScene.addChild(enemy);
game.rootScene.addEventListener(‘touchstart’, function(e){
//...中略...
4.敵を出す
3. ブラウザのキャッシュを消す
4.敵を出す
4. ブラウザをリロード
4.敵を出す
main.js                               敵の画像の読み込み
//...中略...
game.preload(‘chara1.gif’, ‘chara2.gif’);
//...中略...
game.rootScene.addChild(player);
var enemy = new Sprite(32, 32);
enemy.image = game.assets[‘chara2.gif’];
enemy.x = 320 - 32;
enemy.y = (320 - 32) * Math.random();
game.rootScene.addChild(enemy);
game.rootScene.addEventListener(‘touchstart’, function(e){
//...中略...
4.敵を出す
main.js
//...中略...
game.preload(‘chara1.gif’, ‘chara2.gif’);
//...中略...
game.rootScene.addChild(player);
var enemy = new Sprite(32, 32);
                                            敵の初期化と表示
enemy.image = game.assets[‘chara2.gif’];
enemy.x = 320 - 32;
enemy.y = (320 - 32) * Math.random();
game.rootScene.addChild(enemy);
game.rootScene.addEventListener(‘touchstart’, function(e){
//...中略...
4.敵を出す
main.js
//...中略...
game.preload(‘chara1.gif’, ‘chara2.gif’);
//...中略...
game.rootScene.addChild(player);
var enemy = new Sprite(32, 32);
                                            敵の初期化と表示
enemy.image = game.assets[‘chara2.gif’];
enemy.x = 320 - 32;
enemy.y = (320 - 32) * Math.random();
game.rootScene.addChild(enemy);
game.rootScene.addEventListener(‘touchstart’, function(e){
//...中略...                 var player=new Sprite(32, 32);
                          player.image=game.assets[‘chara1.gif];
                          game.rootScene.addChild(player);
4.敵を出す
main.js
//...中略...
game.preload(‘chara1.gif’, ‘chara2.gif’);
//...中略...
game.rootScene.addChild(player);
var enemy = new Sprite(32, 32);
enemy.image = game.assets[‘chara2.gif’];
enemy.x = 320 - 32;                         敵の位置の設定
enemy.y = (320 - 32) * Math.random()
game.rootScene.addChild(enemy);
game.rootScene.addEventListener(‘touchstart’, function(e){
//...中略...
あなたがシューティングゲームを
         作るのに必要なたった10個の要素                625 users



       1. enchant.js初期化      6. 弾を撃つ

       2. 自機を出す              7. 弾で敵を倒す

       3. 自機を動かす             8. 敵をたくさん出す

       4. 敵を出す               9. ゲームオーバーを作る

       5. 敵を動かす              10.スコアを出す
http://chephes.com/meetup/
5.敵を動かす
 1. main.jsを以下のように書き換える

main.js
//...中略...
enemy.x = 320 - 32;
game.rootScene.addChild(enemy);
enemy.addEventListener(‘enterframe’, function(){
  this.x -= 2;
});
game.rootScene.addEventListener(‘touchstart’, function(e){
//...中略...
5.敵を動かす
2. ブラウザのキャッシュを消す
5.敵を動かす
3. ブラウザをリロード
5.敵を動かす
3. ブラウザをリロード
5.敵を動かす
main.js

//...中略...
enemy.x = 320 - 32;
game.rootScene.addChild(enemy);
enemy.addEventListener(‘enterframe’, function(){
  this.x -= 2;
});                                 敵の毎フレームの
game.rootScene.addEventListener(‘touchstart’, function(e){
//...中略...                              処理の設定
5.敵を動かす
main.js

//...中略...
enemy.x = 320 - 32;
game.rootScene.addChild(enemy);
enemy.addEventListener(‘enterframe’, function(){
  this.x -= 2;
});                                    自分の位置を
game.rootScene.addEventListener(‘touchstart’, function(e){
//...中略...                            左に2px動かす
あなたがシューティングゲームを
         作るのに必要なたった10個の要素                625 users



       1. enchant.js初期化      6. 弾を撃つ

       2. 自機を出す              7. 弾で敵を倒す

       3. 自機を動かす             8. 敵をたくさん出す

       4. 敵を出す               9. ゲームオーバーを作る

       5. 敵を動かす              10.スコアを出す
http://chephes.com/meetup/
6.弾を撃つ
  1.   icon0.gifをフォルダに追加

  2.   main.jsを以下のように書き換える
main.js
//...中略...
game.preload(‘chara1.gif’, ‘chara2.gif’, ‘icon0.gif’);
//...中略...
game.rootScene.addEventListener(‘touchstart’, function(e){
  player.y = e.y;
  var missile = new Sprite(16, 16);
  missile.image = game.assets[‘icon0.gif’];
  missile.frame = 54;
  missile.x = player.x;
  missile.y = player.y;
  missile.addEventListener(‘enterframe’, function(){
     this.x += 2;
  });
  game.rootScene.addChild(missile);
});
//...中略...
6.弾を撃つ
3. ブラウザのキャッシュを消す
6.弾を撃つ
4. ブラウザをリロード
6.弾を撃つ
                                     弾画像の読み込み
main.js
//...中略...
game.preload(‘chara1.gif’, ‘chara2.gif’, ‘icon0.gif’);
//...中略...
game.rootScene.addEventListener(‘touchstart’, function(e){
  player.y = e.y;
  var missile=new Sprite(16, 16);
  missile.image = game.assets[‘icon0.gif’];
  missile.frame = 54;
  missile.x = player.x;
  missile.y = player.y;
  missile.addEventListener(‘enterframe’, function(){
    this.x += 2;
  });
  game.rootScene.addChild(missile);
});
//...中略...
6.弾を撃つ
main.js
//...中略...
game.preload(‘chara1.gif’, ‘chara2.gif’, ‘icon0.gif’);
//...中略...
game.rootScene.addEventListener(‘touchstart’, function(e){
  player.y = e.y;
  var missile=new Sprite(16, 16);
  missile.image = game.assets[‘icon0.gif’];
  missile.frame = 54;
  missile.x = player.x;
  missile.y = player.y;
                                                   弾の初期化
  missile.addEventListener(‘enterframe’, function(){
    this.x += 2;
  });
  game.rootScene.addChild(missile);
});
//...中略...
6.弾を撃つ
main.js
//...中略...
game.preload(‘chara1.gif’, ‘chara2.gif’, ‘icon0.gif’);
//...中略...
game.rootScene.addEventListener(‘touchstart’, function(e){
  player.y = e.y;
  var missile=new Sprite(16, 16);
  missile.image = game.assets[‘icon0.gif’];
  missile.frame = 54;
  missile.x = player.x;                      弾の画像の選択
  missile.y = player.y;
  missile.addEventListener(‘enterframe’, function(){
    this.x += 2;
  });
  game.rootScene.addChild(missile);
});
//...中略...
6.弾を撃つ
icon0.gif
6.弾を撃つ
 icon0.gif
 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47
48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63
64 65 66 67 68 69 70
6.弾を撃つ
 icon0.gif
 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47
48 49 50 51 52 53      55 56 57 58 59 60 61 62 63
64 65 66 67 68 69 70
6.弾を撃つ
main.js
//...中略...
game.preload(‘chara1.gif’, ‘chara2.gif’, ‘icon0.gif’);
//...中略...
game.rootScene.addEventListener(‘touchstart’, function(e){
  player.y = e.y;
  var missile=new Sprite(16, 16);
  missile.image = game.assets[‘icon0.gif’];
  missile.frame = 54;
  missile.x = player.x;                          playerの位置に
  missile.y = player.y;
  missile.addEventListener(‘enterframe’, function(){
    this.x += 2;                                         弾を移動
  });
  game.rootScene.addChild(missile);
});
//...中略...
6.弾を撃つ
main.js
//...中略...
game.preload(‘chara1.gif’, ‘chara2.gif’, ‘icon0.gif’);
//...中略...
game.rootScene.addEventListener(‘touchstart’, function(e){
  player.y = e.y;
  var missile=new Sprite(16, 16);
  missile.image = game.assets[‘icon0.gif’];
  missile.frame = 54;
  missile.x = player.x;
                                                     弾の移動
  missile.y = player.y;
  missile.addEventListener(‘enterframe’, function(){
    this.x += 2;
  });
  game.rootScene.addChild(missile);
});
//...中略...
あなたがシューティングゲームを
         作るのに必要なたった10個の要素                625 users



       1. enchant.js初期化      6. 弾を撃つ

       2. 自機を出す              7. 弾で敵を倒す

       3. 自機を動かす             8. 敵をたくさん出す

       4. 敵を出す               9. ゲームオーバーを作る

       5. 敵を動かす              10.スコアを出す
http://chephes.com/meetup/
7.弾で敵を倒す
 1. main.jsを以下のように書き換える
main.js
//...中略...
game.rootScene.addEventListener(‘touchstart’, function(e){
//...中略...
  missile.y = player.y;
  missile.addEventListener(‘enterframe’, function(){
    this.x += 2;
    if(enemy.intersect(this)){
      game.rootScene.removeChild(enemy);
      game.rootScene.removeChild(this);
    }
  });
  game.rootScene.addChild(missile);
});
//...中略...
7.弾で敵を倒す
2. ブラウザのキャッシュを消す
7.弾で敵を倒す
3. ブラウザをリロード
7.弾で敵を倒す
main.js
//...中略...
game.rootScene.addEventListener(‘touchstart’, function(e){
//...中略...
  missile.y = player.y;
  missile.addEventListener(‘enterframe’, function(){
    this.x += 2;
    if(enemy.intersect(this)){
      game.rootScene.removeChild(enemy);
      game.rootScene.removeChild(this);
                                          敵と弾のあたり
    }
  });                                             判定
  game.rootScene.addChild(missile);
});
//...中略...
3.自機を動かす
    Entity.intersect(s);
Entityの矩形が交差しているかどうかにより判定衝突
を行う。引数には対象のEntitiyをとる。このメソッド
はEntityクラスにて定義さているので、Spriteで利用可
能
7.弾で敵を倒す
main.js
//...中略...
game.rootScene.addEventListener(‘touchstart’, function(e){
//...中略...
  missile.y = player.y;
  missile.addEventListener(‘enterframe’, function(){
    this.x += 2;
    if(enemy.intersect(this)){
      game.rootScene.removeChild(enemy);
      game.rootScene.removeChild(this);
                                               敵と弾を消す
    }
  });
  game.rootScene.addChild(missile);
});
//...中略...
3.自機を動かす
 Group.removeChild(s);
GroupからNodeを削除する。引数には対象のEntitiyを
とる。このメソッドはGroupクラスにて定義さている
ので、Sceneで利用可能
7.弾で敵を倒す
 1. main.jsを以下のように書き換える
main.js
//...中略...
game.rootScene.addEventListener(‘touchstart’, function(e){
//...中略...
  missile.y = player.y;
  missile.addEventListener(‘enterframe’, function(){
    this.x += 2;
    if(enemy.intersect(this)){
      game.rootScene.removeChild(enemy);
      game.rootScene.removeChild(this);
    }
  });
  game.rootScene.addChild(missile);
});
//...中略...
あなたがシューティングゲームを
         作るのに必要なたった10個の要素                625 users



       1. enchant.js初期化      6. 弾を撃つ

       2. 自機を出す              7. 弾で敵を倒す

       3. 自機を動かす             8. 敵をたくさん出す

       4. 敵を出す               9. ゲームオーバーを作る

       5. 敵を動かす              10.スコアを出す
http://chephes.com/meetup/
8.敵をたくさん出す
 1. main.jsを以下のように書き換える
main.js
//...中略...
game.rootScene.addChild(player);
var enemies = [];
game.rootScene.addEventListener(‘enterframe’, function(){
  if(Math.random() < 0.1){
    var enemy = new Sprite(32, 32);
    //...中略...
      this.x -= 2;
    });
    enemies.push(enemy);
  }
});
//...中略...
8.敵をたくさん出す
 2. main.jsをまだまだ書き換える
main.js
//...中略...
missile.addEventListener(‘enterframe’, function(){
  this.x += 2;
  for(var i = 0; i < enemies.length; i++){
    if(enemies[i].intersect(this)){
      game.rootScene.removeChild(enemies[i]);
      game.rootScene.removeChild(this);
      enemies.splice(i, 1);
      break;
    }
  }
});
//...中略...
8.敵をたくさん出す
3. ブラウザのキャッシュを消す
8.敵をたくさん出す
4. ブラウザをリロード
8.敵をたくさん出す
main.js
//...中略...
game.rootScene.addChild(player);
var enemies = [];
                                    敵配列の用意
game.rootScene.addEventListener(‘enterframe’, function(){
  if(Math.random() < 0.1){
    var enemy = new Sprite(32, 32);
    //...中略...
      this.x -= 2;
    });
    enemies.push(enemy);
  }
});
//...中略...
8.敵をたくさん出す
main.js
//...中略...
game.rootScene.addChild(player);
var enemies = [];
game.rootScene.addEventListener(‘enterframe’, function(){
  if(Math.random() < 0.1){
    var enemy = new Sprite(32, 32);
    //...中略...
      this.x -= 2;                  毎フレームごとの
    });
    enemies.push(enemy);
  }                                     処理を追加
});
//...中略...
8.敵をたくさん出す
main.js
//...中略...
game.rootScene.addChild(player);
var enemies = [];
game.rootScene.addEventListener(‘enterframe’, function(){
  if(Math.random() < 0.1){
    var enemy = new Sprite(32, 32);
    //...中略...                       毎フレームだと
      this.x -= 2;
    });
    enemies.push(enemy);
                                     多すぎるので、
  }
});
//...中略...
                                   1/10の確率で出現
8.敵をたくさん出す
main.js
//...中略...
game.rootScene.addChild(player);
var enemies = [];
game.rootScene.addEventListener(‘enterframe’, function(){
  if(Math.random() < 0.1){
    var enemy = new Sprite(32, 32);
    //...中略...
      this.x -= 2;                    表示されてる
    });
    enemies.push(enemy);
  }                                  敵リストに追加
});
//...中略...
8.敵をたくさん出す
main.js
//...中略...
missile.addEventListener(‘enterframe’, function(){
  this.x += 2;
  for(var i = 0; i < enemies.length; i++){
    if(enemies[i].intersect(this)){
      game.rootScene.removeChild(enemies[i]);
      game.rootScene.removeChild(this);
      enemies.splice(i, 1);             敵の数だけループ
      break;
    }
  }
});
//...中略...
8.敵をたくさん出す
main.js
//...中略...
missile.addEventListener(‘enterframe’, function(){
  this.x += 2;
  for(var i = 0; i < enemies.length; i++){
    if(enemies[i].intersect(this)){
      game.rootScene.removeChild(enemies[i]);
      game.rootScene.removeChild(this);
      enemies.splice(i, 1);

    }
      break;
                                     i番目の敵と
  }
});
//...中略...
                              ミサイルの当たり判定
8.敵をたくさん出す
main.js
//...中略...
missile.addEventListener(‘enterframe’, function(){
  this.x += 2;
  for(var i = 0; i < enemies.length; i++){
    if(enemies[i].intersect(this)){
      game.rootScene.removeChild(enemies[i]);
      game.rootScene.removeChild(this);
      enemies.splice(i, 1);

    }
      break;
                                     i番目の敵を
  }
});
//...中略...
                                 敵リストから削除
8.敵をたくさん出す
main.js
//...中略...
missile.addEventListener(‘enterframe’, function(){
  this.x += 2;
  for(var i = 0; i < enemies.length; i++){
    if(enemies[i].intersect(this)){
      game.rootScene.removeChild(enemies[i]);
      game.rootScene.removeChild(this);
      enemies.splice(i, 1);
      break;
    }
  }
});
                      ループの中断
//...中略...
あなたがシューティングゲームを
         作るのに必要なたった10個の要素                625 users



       1. enchant.js初期化      6. 弾を撃つ

       2. 自機を出す              7. 弾で敵を倒す

       3. 自機を動かす             8. 敵をたくさん出す

       4. 敵を出す               9. ゲームオーバーを作る

       5. 敵を動かす              10.スコアを出す
http://chephes.com/meetup/
9.ゲームオーバーを作る
 1. main.jsを以下のように書き換える
main.js
//...中略...
enemy.addEventListener(‘enterframe’, function(){
  this.x -= 2;
  if(player.intersect(this)){
    game.stop();
    var label = new Label(‘GAME OVER’);
    label.font = ‘32px sans-serif’;
    label.x = 50;
    label.y = 150;
    game.rootScene.addChild(label);
  }
});
//...中略...
9.ゲームオーバーを作る
9.ゲームオーバーを作る
9.ゲームオーバーを作る
main.js
//...中略...
enemy.addEventListener(‘enterframe’, function(){
  this.x -= 2;
  if(player.intersect(this)){
    game.stop();
    var label = new Label(‘GAME OVER’);
    label.font = ‘32px sans-serif’;      敵とPlayerの
    label.x = 50;
    label.y = 150;
    game.rootScene.addChild(label);       当たり判定
  }
});
//...中略...
9.ゲームオーバーを作る
main.js
//...中略...
enemy.addEventListener(‘enterframe’, function(){
  this.x -= 2;
  if(player.intersect(this)){
    game.stop();
    var label = new Label(‘GAME OVER’);
    label.font = ‘32px sans-serif’;
    label.x = 50;
                                        ゲームの停止
    label.y = 150;
    game.rootScene.addChild(label);
  }
});
//...中略...
9.ゲームオーバーを作る
main.js
//...中略...
enemy.addEventListener(‘enterframe’, function(){
  this.x -= 2;
  if(player.intersect(this)){
    game.stop();
    var label = new Label(‘GAME OVER’);
    label.font = ‘32px sans-serif’;         GAMEOVER
    label.x = 50;
    label.y = 150;                            の表示
    game.rootScene.addChild(label);
  }
});
//...中略...
あなたがシューティングゲームを
         作るのに必要なたった10個の要素                625 users



       1. enchant.js初期化      6. 弾を撃つ

       2. 自機を出す              7. 弾で敵を倒す

       3. 自機を動かす             8. 敵をたくさん出す

       4. 敵を出す               9. ゲームオーバーを作る

       5. 敵を動かす              10.スコアを出す
http://chephes.com/meetup/
10.スコアを出す
 1. main.jsを以下のように書き換える
main.js
//...中略...
    enemies.push(enemy);
  }
});
var label = new Label(“SCORE:0”);
game.rootScene.addChild(label);
var score = 0;
game.rootScene.addEventListener(‘touchstart’, function(e){
//...中略...
         enemies.splice(i, 1);
         score++;
         label.text = “SCORE:” + score;
         break;
//...中略...
10.スコアを出す
10.スコアを出す
main.js
//...中略...
    enemies.push(enemy);
  }                                       ラベルの表示
});
var label = new Label(“SCORE:0”);
game.rootScene.addChild(label);
var score = 0;
game.rootScene.addEventListener(‘touchstart’, function(e){
//...中略...
         enemies.splice(i, 1);
         score++;
         label.text = “SCORE:” + score;
         break;
//...中略...
10.スコアを出す
main.js
//...中略...
    enemies.push(enemy);
  }
});
var label = new Label(“SCORE:0”);
game.rootScene.addChild(label);    スコアの初期化
var score = 0;
game.rootScene.addEventListener(‘touchstart’, function(e){
//...中略...
         enemies.splice(i, 1);
         score++;
         label.text = “SCORE:” + score;
         break;
//...中略...
10.スコアを出す
main.js
//...中略...
    enemies.push(enemy);
  }
});
var label = new Label(“SCORE:0”);
game.rootScene.addChild(label);
var score = 0;
game.rootScene.addEventListener(‘touchstart’, function(e){
//...中略...
         enemies.splice(i, 1);
         score++;
                                       スコアの増加
         label.text = “SCORE:” + score;
         break;
//...中略...
10.スコアを出す
main.js
//...中略...
    enemies.push(enemy);
  }
});
var label = new Label(“SCORE:0”);
game.rootScene.addChild(label);
var score = 0;
game.rootScene.addEventListener(‘touchstart’, function(e){
//...中略...
         enemies.splice(i, 1);
         score++;
                                              表示の更新
         label.text = “SCORE:” + score;
         break;
//...中略...
あなたがシューティングゲームを
         作るのに必要なたった10個の要素                625 users



       1. enchant.js初期化      6. 弾を撃つ

       2. 自機を出す              7. 弾で敵を倒す

       3. 自機を動かす             8. 敵をたくさん出す

       4. 敵を出す               9. ゲームオーバーを作る

       5. 敵を動かす              10.スコアを出す
http://chephes.com/meetup/
あなたがシューティングゲームを
         作るのに必要なたった10個の要素                625 users



       1. enchant.js初期化      6. 弾を撃つ




                       済
       2. 自機を出す              7. 弾で敵を倒す

       3. 自機を動かす             8. 敵をたくさん出す

       4. 敵を出す               9. ゲームオーバーを作る

       5. 敵を動かす              10.スコアを出す
http://chephes.com/meetup/
1   enchant();
 2   window.onload=function(){
 3     var game=new Game(320, 320);
 4     game.preload('chara1.gif', 'chara2.gif','icon0.gif');
 5     game.onload=function(){
 6     ! var player=new Sprite(32,32);
 7     ! player.image=game.assets['chara1.gif'];
 8     ! game.rootScene.addChild(player);
 9     ! var enemies = [];
10     ! game.rootScene.addEventListener('enterframe', function(){
11     ! !    if(Math.random() < 0.1){
12   !    !     ! var enemy=new Sprite(32, 32);
13   !    !     ! enemy.image=game.assets['chara2.gif'];
14   !    !     ! enemy.x = 320 - 32;
15   !    !     ! enemy.y = (320 - 32) * Math.random();
16   !    !     ! game.rootScene.addChild(enemy);
17   !    !     ! enemy.addEventListener('enterframe', function(){
18   !    !     ! !    this.x -= 2;
19   !    !     ! !    if(player.intersect(this)){
20   !    !     ! !    !    game.stop();
21   !    !     ! !    !    var label = new Label('GAME OVER');
22   !    !   !    !   !    label.font = '32px sans-serif';
23   !    !   !    !   !    label.x = 50;
24   !    !   !    !   !    label.y = 150;
25   !    !   !    !   !    game.rootScene.addChild(label);
26   !    !     ! !    }
27   !    !     ! });
28   !    !     ! enemies.push(enemy);
29     ! !    }
30     ! });
31       !   var label = new Label("SCORE:0");
32       !   game.rootScene.addChild(label);
33       !   var score = 0;
34       !   game.rootScene.addEventListener('touchstart', function(e){
35       !   !    player.y=e.y;
36       !   !    var missile=new Sprite(16,16);
37       !   !    missile.image=game.assets['icon0.gif'];
38       !   !    missile.frame=54;
39       !   !    missile.x=player.x;
40       !   !    missile.y=player.y;
41       !   !    missile.addEventListener('enterframe',function(){
42       !   !    !    this.x += 2;
43       !   !    !    for(var i = 0; i < enemies.length; i++){
44   !         ! !     !    if(enemies[i].intersect(this)){
45   !         ! !     !    !    game.rootScene.removeChild(enemies[i]);
46   !         ! !     !    !    game.rootScene.removeChild(this);
47   !         ! !     !    !    enemies.splice(i, 1);
48   !         ! !     !    !    score++;
49   !         ! !     !    !    label.text = "SCORE:" + score;
50   !         ! !     !    !    break;
51   !         ! !     !    }
52     !     !    !    }
53     !     !    });
54     !     !    game.rootScene.addChild(missile);
55     !     });
56      };
57      game.start();
58   };
発展
アイテムなどを作ってみる

敵キャラのバリエーションを増やす

ステージを作ってみる

敵をクラス化してみる

弾をクラス化してみる
enchant.js meetup Tokyo vol.2 Tutorial

More Related Content

What's hot

Advanced Javascript
Advanced JavascriptAdvanced Javascript
Advanced JavascriptAdieu
 
HTML Dasar : #7 Hyperlink
HTML Dasar : #7 HyperlinkHTML Dasar : #7 Hyperlink
HTML Dasar : #7 Hyperlink
Sandhika Galih
 
CSS Dasar #6 : Background
CSS Dasar #6 : BackgroundCSS Dasar #6 : Background
CSS Dasar #6 : Background
Sandhika Galih
 
CSS Basics
CSS BasicsCSS Basics
CSS Basics
Sanjeev Kumar
 
HTML Dasar : #8 Image
HTML Dasar : #8 ImageHTML Dasar : #8 Image
HTML Dasar : #8 Image
Sandhika Galih
 
CSS Day: CSS Grid Layout
CSS Day: CSS Grid Layout CSS Day: CSS Grid Layout
CSS Day: CSS Grid Layout
Rachel Andrew
 
css-presentation.ppt
css-presentation.pptcss-presentation.ppt
css-presentation.ppt
MonishaAb1
 
CSS Dasar #9 : Inheritance
CSS Dasar #9 : InheritanceCSS Dasar #9 : Inheritance
CSS Dasar #9 : Inheritance
Sandhika Galih
 
CSS Notes in PDF, Easy to understand. For beginner to advanced. ...
CSS Notes in PDF, Easy to understand. For beginner to advanced.              ...CSS Notes in PDF, Easy to understand. For beginner to advanced.              ...
CSS Notes in PDF, Easy to understand. For beginner to advanced. ...
syedfaisal759877
 
Css Text Formatting
Css Text FormattingCss Text Formatting
Css Text Formatting
Dr. Jasmine Beulah Gnanadurai
 
CSS Layouting #3 : Box Model
CSS Layouting #3 : Box ModelCSS Layouting #3 : Box Model
CSS Layouting #3 : Box Model
Sandhika Galih
 
JavaScript
JavaScriptJavaScript
Programación II CIP200 Ejercicios resueltos en el Laboratorio de estructuras ...
Programación II CIP200 Ejercicios resueltos en el Laboratorio de estructuras ...Programación II CIP200 Ejercicios resueltos en el Laboratorio de estructuras ...
Programación II CIP200 Ejercicios resueltos en el Laboratorio de estructuras ...
rasave
 
React event
React eventReact event
React event
Ducat
 
HTML Dasar : #6 List
HTML Dasar : #6 ListHTML Dasar : #6 List
HTML Dasar : #6 List
Sandhika Galih
 
Country State City Dropdown in PHP
Country State City Dropdown in PHPCountry State City Dropdown in PHP
Country State City Dropdown in PHP
Vineet Kumar Saini
 
Css lecture notes
Css lecture notesCss lecture notes
Css lecture notes
Santhiya Grace
 
Basic perl programming
Basic perl programmingBasic perl programming
Basic perl programming
Thang Nguyen
 
CSS Dasar #7 : Selector
CSS Dasar #7 : SelectorCSS Dasar #7 : Selector
CSS Dasar #7 : Selector
Sandhika Galih
 

What's hot (20)

Advanced Javascript
Advanced JavascriptAdvanced Javascript
Advanced Javascript
 
HTML Dasar : #7 Hyperlink
HTML Dasar : #7 HyperlinkHTML Dasar : #7 Hyperlink
HTML Dasar : #7 Hyperlink
 
CSS Dasar #6 : Background
CSS Dasar #6 : BackgroundCSS Dasar #6 : Background
CSS Dasar #6 : Background
 
CSS Basics
CSS BasicsCSS Basics
CSS Basics
 
HTML Dasar : #8 Image
HTML Dasar : #8 ImageHTML Dasar : #8 Image
HTML Dasar : #8 Image
 
CSS Day: CSS Grid Layout
CSS Day: CSS Grid Layout CSS Day: CSS Grid Layout
CSS Day: CSS Grid Layout
 
CSS ppt
CSS pptCSS ppt
CSS ppt
 
css-presentation.ppt
css-presentation.pptcss-presentation.ppt
css-presentation.ppt
 
CSS Dasar #9 : Inheritance
CSS Dasar #9 : InheritanceCSS Dasar #9 : Inheritance
CSS Dasar #9 : Inheritance
 
CSS Notes in PDF, Easy to understand. For beginner to advanced. ...
CSS Notes in PDF, Easy to understand. For beginner to advanced.              ...CSS Notes in PDF, Easy to understand. For beginner to advanced.              ...
CSS Notes in PDF, Easy to understand. For beginner to advanced. ...
 
Css Text Formatting
Css Text FormattingCss Text Formatting
Css Text Formatting
 
CSS Layouting #3 : Box Model
CSS Layouting #3 : Box ModelCSS Layouting #3 : Box Model
CSS Layouting #3 : Box Model
 
JavaScript
JavaScriptJavaScript
JavaScript
 
Programación II CIP200 Ejercicios resueltos en el Laboratorio de estructuras ...
Programación II CIP200 Ejercicios resueltos en el Laboratorio de estructuras ...Programación II CIP200 Ejercicios resueltos en el Laboratorio de estructuras ...
Programación II CIP200 Ejercicios resueltos en el Laboratorio de estructuras ...
 
React event
React eventReact event
React event
 
HTML Dasar : #6 List
HTML Dasar : #6 ListHTML Dasar : #6 List
HTML Dasar : #6 List
 
Country State City Dropdown in PHP
Country State City Dropdown in PHPCountry State City Dropdown in PHP
Country State City Dropdown in PHP
 
Css lecture notes
Css lecture notesCss lecture notes
Css lecture notes
 
Basic perl programming
Basic perl programmingBasic perl programming
Basic perl programming
 
CSS Dasar #7 : Selector
CSS Dasar #7 : SelectorCSS Dasar #7 : Selector
CSS Dasar #7 : Selector
 

Viewers also liked

enchant.js meetup! ショートセッション「はじめてのenchant.js AtlasXでゲームをつくる」
enchant.js meetup! ショートセッション「はじめてのenchant.js AtlasXでゲームをつくる」enchant.js meetup! ショートセッション「はじめてのenchant.js AtlasXでゲームをつくる」
enchant.js meetup! ショートセッション「はじめてのenchant.js AtlasXでゲームをつくる」
wise9
 
Coffee Scriptでenchant.js
Coffee Scriptでenchant.jsCoffee Scriptでenchant.js
Coffee Scriptでenchant.js
Naoyuki Totani
 
17 семинар
17 семинар17 семинар
How to sell 3 million widgets, guaranteed!
How to sell 3 million widgets, guaranteed!How to sell 3 million widgets, guaranteed!
How to sell 3 million widgets, guaranteed!
Jaimes Nel
 
Be green, be accessible
Be green, be accessibleBe green, be accessible
Be green, be accessible
Olivier Nourry
 
Derivatives in graphing-dfs
Derivatives in graphing-dfsDerivatives in graphing-dfs
Derivatives in graphing-dfs
Farhana Shaheen
 
Annie Savant
Annie Savant Annie Savant
Annie Savant adubose
 
Código das equipes atualizado
Código das equipes atualizadoCódigo das equipes atualizado
Código das equipes atualizadoMajor Ribamar
 
Shelby Cooper
Shelby CooperShelby Cooper
Shelby Cooperadubose
 
脉轮能量书ⅰ
脉轮能量书ⅰ脉轮能量书ⅰ
脉轮能量书ⅰguxianbang
 
Callie Hodge
Callie HodgeCallie Hodge
Callie Hodgeadubose
 
Сравнение SEO с интернет маркетингом
Сравнение SEO с интернет маркетингомСравнение SEO с интернет маркетингом
Сравнение SEO с интернет маркетингом
Олександр Мілютін
 
Sine and Cosine Curves- Dr. Farhana Shaheen
Sine and Cosine Curves- Dr. Farhana ShaheenSine and Cosine Curves- Dr. Farhana Shaheen
Sine and Cosine Curves- Dr. Farhana Shaheen
Farhana Shaheen
 
Briasha King
Briasha KingBriasha King
Briasha Kingadubose
 
Connor Lofton
Connor LoftonConnor Lofton
Connor Loftonadubose
 
IxDA Edu Summit 2015 - Pontus Warnestal
IxDA Edu Summit 2015 - Pontus WarnestalIxDA Edu Summit 2015 - Pontus Warnestal
IxDA Edu Summit 2015 - Pontus Warnestal
Pontus Wärnestål
 
All analysis
All analysisAll analysis
All analysisAmber_
 
Trabajo practico nº14
Trabajo practico nº14Trabajo practico nº14
Trabajo practico nº14sscida
 
Media kit mdc asrl 2011
Media kit mdc asrl 2011Media kit mdc asrl 2011
Media kit mdc asrl 2011andresobel
 

Viewers also liked (20)

enchant.js meetup! ショートセッション「はじめてのenchant.js AtlasXでゲームをつくる」
enchant.js meetup! ショートセッション「はじめてのenchant.js AtlasXでゲームをつくる」enchant.js meetup! ショートセッション「はじめてのenchant.js AtlasXでゲームをつくる」
enchant.js meetup! ショートセッション「はじめてのenchant.js AtlasXでゲームをつくる」
 
Coffee Scriptでenchant.js
Coffee Scriptでenchant.jsCoffee Scriptでenchant.js
Coffee Scriptでenchant.js
 
17 семинар
17 семинар17 семинар
17 семинар
 
How to sell 3 million widgets, guaranteed!
How to sell 3 million widgets, guaranteed!How to sell 3 million widgets, guaranteed!
How to sell 3 million widgets, guaranteed!
 
Be green, be accessible
Be green, be accessibleBe green, be accessible
Be green, be accessible
 
Derivatives in graphing-dfs
Derivatives in graphing-dfsDerivatives in graphing-dfs
Derivatives in graphing-dfs
 
Annie Savant
Annie Savant Annie Savant
Annie Savant
 
Código das equipes atualizado
Código das equipes atualizadoCódigo das equipes atualizado
Código das equipes atualizado
 
Shelby Cooper
Shelby CooperShelby Cooper
Shelby Cooper
 
脉轮能量书ⅰ
脉轮能量书ⅰ脉轮能量书ⅰ
脉轮能量书ⅰ
 
Callie Hodge
Callie HodgeCallie Hodge
Callie Hodge
 
Сравнение SEO с интернет маркетингом
Сравнение SEO с интернет маркетингомСравнение SEO с интернет маркетингом
Сравнение SEO с интернет маркетингом
 
Sine and Cosine Curves- Dr. Farhana Shaheen
Sine and Cosine Curves- Dr. Farhana ShaheenSine and Cosine Curves- Dr. Farhana Shaheen
Sine and Cosine Curves- Dr. Farhana Shaheen
 
Briasha King
Briasha KingBriasha King
Briasha King
 
Connor Lofton
Connor LoftonConnor Lofton
Connor Lofton
 
IxDA Edu Summit 2015 - Pontus Warnestal
IxDA Edu Summit 2015 - Pontus WarnestalIxDA Edu Summit 2015 - Pontus Warnestal
IxDA Edu Summit 2015 - Pontus Warnestal
 
Sin título 1
Sin título 1Sin título 1
Sin título 1
 
All analysis
All analysisAll analysis
All analysis
 
Trabajo practico nº14
Trabajo practico nº14Trabajo practico nº14
Trabajo practico nº14
 
Media kit mdc asrl 2011
Media kit mdc asrl 2011Media kit mdc asrl 2011
Media kit mdc asrl 2011
 

Similar to enchant.js meetup Tokyo vol.2 Tutorial

2012 03-03-titanium plusquicktigame2d
2012 03-03-titanium plusquicktigame2d2012 03-03-titanium plusquicktigame2d
2012 03-03-titanium plusquicktigame2dHiroshi Oyamada
 
Osakijs #01 「enchant.jsハンズオン資料」
Osakijs #01 「enchant.jsハンズオン資料」Osakijs #01 「enchant.jsハンズオン資料」
Osakijs #01 「enchant.jsハンズオン資料」
Yusuke HIDESHIMA
 
Aiwolf seminar 2019_ja
Aiwolf seminar 2019_jaAiwolf seminar 2019_ja
Aiwolf seminar 2019_ja
Takedaatsushi
 
Creators'night#14今井
Creators'night#14今井Creators'night#14今井
Creators'night#14今井
Daisuke Imai
 
㉔cocos2dでゲームを作ろう!その2
㉔cocos2dでゲームを作ろう!その2㉔cocos2dでゲームを作ろう!その2
㉔cocos2dでゲームを作ろう!その2
Nishida Kansuke
 
人狼知能セミナー資料案20170624
人狼知能セミナー資料案20170624人狼知能セミナー資料案20170624
人狼知能セミナー資料案20170624
Kosuke Shinoda
 
enchant.jsでゲーム制作をはじめてみよう
enchant.jsでゲーム制作をはじめてみようenchant.jsでゲーム制作をはじめてみよう
enchant.jsでゲーム制作をはじめてみようRyota Shiroguchi
 
㉖cocos2dを覚えよう!
㉖cocos2dを覚えよう!㉖cocos2dを覚えよう!
㉖cocos2dを覚えよう!
Nishida Kansuke
 
enchant.js勉強会
enchant.js勉強会enchant.js勉強会
enchant.js勉強会
Hiroaki Murayama
 
Html canvas shooting_and_performanceup
Html canvas shooting_and_performanceupHtml canvas shooting_and_performanceup
Html canvas shooting_and_performanceupYohei Munesada
 
Aiwolfseminar2020
Aiwolfseminar2020Aiwolfseminar2020
Aiwolfseminar2020
Takedaatsushi
 
ゲーム開発初心者の僕がUnity + WebSocketで何か作ってみた
ゲーム開発初心者の僕がUnity + WebSocketで何か作ってみたゲーム開発初心者の僕がUnity + WebSocketで何か作ってみた
ゲーム開発初心者の僕がUnity + WebSocketで何か作ってみた
Kohei Kadowaki
 
C++でのゲームプログラミングをしたときのお話 札幌C++勉強会 #4 〜スタートゲームプログラミング〜
C++でのゲームプログラミングをしたときのお話 札幌C++勉強会 #4 〜スタートゲームプログラミング〜C++でのゲームプログラミングをしたときのお話 札幌C++勉強会 #4 〜スタートゲームプログラミング〜
C++でのゲームプログラミングをしたときのお話 札幌C++勉強会 #4 〜スタートゲームプログラミング〜
勝成 鈴江
 
Cocos2d-x(JS) ハンズオン #07「新エディタ Cocos Creator v1.0」
Cocos2d-x(JS) ハンズオン #07「新エディタ Cocos Creator v1.0」Cocos2d-x(JS) ハンズオン #07「新エディタ Cocos Creator v1.0」
Cocos2d-x(JS) ハンズオン #07「新エディタ Cocos Creator v1.0」
Tomoaki Shimizu
 
GoCon 2015 Summer GoのASTをいじくって新しいツールを作る
GoCon 2015 Summer GoのASTをいじくって新しいツールを作るGoCon 2015 Summer GoのASTをいじくって新しいツールを作る
GoCon 2015 Summer GoのASTをいじくって新しいツールを作る
Masahiro Wakame
 
Creators'night#12今井
Creators'night#12今井Creators'night#12今井
Creators'night#12今井
Daisuke Imai
 
Canvas de shooting 制作のポイント
Canvas de shooting 制作のポイントCanvas de shooting 制作のポイント
Canvas de shooting 制作のポイントYohei Munesada
 
㉓cocos2dでゲームを作ろう!その1
㉓cocos2dでゲームを作ろう!その1㉓cocos2dでゲームを作ろう!その1
㉓cocos2dでゲームを作ろう!その1
Nishida Kansuke
 
GameSalad9.13発表用資料
GameSalad9.13発表用資料GameSalad9.13発表用資料
GameSalad9.13発表用資料Tomotaka Inagaki
 
Arctic.js
Arctic.jsArctic.js
Arctic.js
chikathreesix
 

Similar to enchant.js meetup Tokyo vol.2 Tutorial (20)

2012 03-03-titanium plusquicktigame2d
2012 03-03-titanium plusquicktigame2d2012 03-03-titanium plusquicktigame2d
2012 03-03-titanium plusquicktigame2d
 
Osakijs #01 「enchant.jsハンズオン資料」
Osakijs #01 「enchant.jsハンズオン資料」Osakijs #01 「enchant.jsハンズオン資料」
Osakijs #01 「enchant.jsハンズオン資料」
 
Aiwolf seminar 2019_ja
Aiwolf seminar 2019_jaAiwolf seminar 2019_ja
Aiwolf seminar 2019_ja
 
Creators'night#14今井
Creators'night#14今井Creators'night#14今井
Creators'night#14今井
 
㉔cocos2dでゲームを作ろう!その2
㉔cocos2dでゲームを作ろう!その2㉔cocos2dでゲームを作ろう!その2
㉔cocos2dでゲームを作ろう!その2
 
人狼知能セミナー資料案20170624
人狼知能セミナー資料案20170624人狼知能セミナー資料案20170624
人狼知能セミナー資料案20170624
 
enchant.jsでゲーム制作をはじめてみよう
enchant.jsでゲーム制作をはじめてみようenchant.jsでゲーム制作をはじめてみよう
enchant.jsでゲーム制作をはじめてみよう
 
㉖cocos2dを覚えよう!
㉖cocos2dを覚えよう!㉖cocos2dを覚えよう!
㉖cocos2dを覚えよう!
 
enchant.js勉強会
enchant.js勉強会enchant.js勉強会
enchant.js勉強会
 
Html canvas shooting_and_performanceup
Html canvas shooting_and_performanceupHtml canvas shooting_and_performanceup
Html canvas shooting_and_performanceup
 
Aiwolfseminar2020
Aiwolfseminar2020Aiwolfseminar2020
Aiwolfseminar2020
 
ゲーム開発初心者の僕がUnity + WebSocketで何か作ってみた
ゲーム開発初心者の僕がUnity + WebSocketで何か作ってみたゲーム開発初心者の僕がUnity + WebSocketで何か作ってみた
ゲーム開発初心者の僕がUnity + WebSocketで何か作ってみた
 
C++でのゲームプログラミングをしたときのお話 札幌C++勉強会 #4 〜スタートゲームプログラミング〜
C++でのゲームプログラミングをしたときのお話 札幌C++勉強会 #4 〜スタートゲームプログラミング〜C++でのゲームプログラミングをしたときのお話 札幌C++勉強会 #4 〜スタートゲームプログラミング〜
C++でのゲームプログラミングをしたときのお話 札幌C++勉強会 #4 〜スタートゲームプログラミング〜
 
Cocos2d-x(JS) ハンズオン #07「新エディタ Cocos Creator v1.0」
Cocos2d-x(JS) ハンズオン #07「新エディタ Cocos Creator v1.0」Cocos2d-x(JS) ハンズオン #07「新エディタ Cocos Creator v1.0」
Cocos2d-x(JS) ハンズオン #07「新エディタ Cocos Creator v1.0」
 
GoCon 2015 Summer GoのASTをいじくって新しいツールを作る
GoCon 2015 Summer GoのASTをいじくって新しいツールを作るGoCon 2015 Summer GoのASTをいじくって新しいツールを作る
GoCon 2015 Summer GoのASTをいじくって新しいツールを作る
 
Creators'night#12今井
Creators'night#12今井Creators'night#12今井
Creators'night#12今井
 
Canvas de shooting 制作のポイント
Canvas de shooting 制作のポイントCanvas de shooting 制作のポイント
Canvas de shooting 制作のポイント
 
㉓cocos2dでゲームを作ろう!その1
㉓cocos2dでゲームを作ろう!その1㉓cocos2dでゲームを作ろう!その1
㉓cocos2dでゲームを作ろう!その1
 
GameSalad9.13発表用資料
GameSalad9.13発表用資料GameSalad9.13発表用資料
GameSalad9.13発表用資料
 
Arctic.js
Arctic.jsArctic.js
Arctic.js
 

More from Ryo Shimizu

Chaienr meetup#2 UEI Deep Station ; A GUI for Deep learning
Chaienr meetup#2 UEI Deep Station ; A GUI for Deep learningChaienr meetup#2 UEI Deep Station ; A GUI for Deep learning
Chaienr meetup#2 UEI Deep Station ; A GUI for Deep learning
Ryo Shimizu
 
Introduction to DEEPstation the GUI Deep learning environment for chainer
Introduction to DEEPstation the GUI Deep learning environment for chainerIntroduction to DEEPstation the GUI Deep learning environment for chainer
Introduction to DEEPstation the GUI Deep learning environment for chainer
Ryo Shimizu
 
enchantMOON presentation @ Mobile IT Asia & ABC 2013 Spring
enchantMOON presentation @ Mobile IT Asia & ABC 2013 SpringenchantMOON presentation @ Mobile IT Asia & ABC 2013 Spring
enchantMOON presentation @ Mobile IT Asia & ABC 2013 Spring
Ryo Shimizu
 
enchant js workshop on Calpoly
enchant js workshop  on Calpolyenchant js workshop  on Calpoly
enchant js workshop on CalpolyRyo Shimizu
 
Beginning gl.enchant
Beginning gl.enchantBeginning gl.enchant
Beginning gl.enchant
Ryo Shimizu
 
enchant.js meetup Tokyo vol.2 Roadmap of enchant.js
enchant.js meetup Tokyo vol.2 Roadmap of enchant.jsenchant.js meetup Tokyo vol.2 Roadmap of enchant.js
enchant.js meetup Tokyo vol.2 Roadmap of enchant.js
Ryo Shimizu
 
9leap Game Programming Camp @Tokyo
9leap Game Programming Camp @Tokyo9leap Game Programming Camp @Tokyo
9leap Game Programming Camp @TokyoRyo Shimizu
 

More from Ryo Shimizu (7)

Chaienr meetup#2 UEI Deep Station ; A GUI for Deep learning
Chaienr meetup#2 UEI Deep Station ; A GUI for Deep learningChaienr meetup#2 UEI Deep Station ; A GUI for Deep learning
Chaienr meetup#2 UEI Deep Station ; A GUI for Deep learning
 
Introduction to DEEPstation the GUI Deep learning environment for chainer
Introduction to DEEPstation the GUI Deep learning environment for chainerIntroduction to DEEPstation the GUI Deep learning environment for chainer
Introduction to DEEPstation the GUI Deep learning environment for chainer
 
enchantMOON presentation @ Mobile IT Asia & ABC 2013 Spring
enchantMOON presentation @ Mobile IT Asia & ABC 2013 SpringenchantMOON presentation @ Mobile IT Asia & ABC 2013 Spring
enchantMOON presentation @ Mobile IT Asia & ABC 2013 Spring
 
enchant js workshop on Calpoly
enchant js workshop  on Calpolyenchant js workshop  on Calpoly
enchant js workshop on Calpoly
 
Beginning gl.enchant
Beginning gl.enchantBeginning gl.enchant
Beginning gl.enchant
 
enchant.js meetup Tokyo vol.2 Roadmap of enchant.js
enchant.js meetup Tokyo vol.2 Roadmap of enchant.jsenchant.js meetup Tokyo vol.2 Roadmap of enchant.js
enchant.js meetup Tokyo vol.2 Roadmap of enchant.js
 
9leap Game Programming Camp @Tokyo
9leap Game Programming Camp @Tokyo9leap Game Programming Camp @Tokyo
9leap Game Programming Camp @Tokyo
 

Recently uploaded

This is the company presentation material of RIZAP Technologies, Inc.
This is the company presentation material of RIZAP Technologies, Inc.This is the company presentation material of RIZAP Technologies, Inc.
This is the company presentation material of RIZAP Technologies, Inc.
chiefujita1
 
ReonHata_便利の副作用に気づかせるための発想支援手法の評価---行為の増減の提示による気づきへの影響---
ReonHata_便利の副作用に気づかせるための発想支援手法の評価---行為の増減の提示による気づきへの影響---ReonHata_便利の副作用に気づかせるための発想支援手法の評価---行為の増減の提示による気づきへの影響---
ReonHata_便利の副作用に気づかせるための発想支援手法の評価---行為の増減の提示による気づきへの影響---
Matsushita Laboratory
 
FIDO Alliance Osaka Seminar: CloudGate.pdf
FIDO Alliance Osaka Seminar: CloudGate.pdfFIDO Alliance Osaka Seminar: CloudGate.pdf
FIDO Alliance Osaka Seminar: CloudGate.pdf
FIDO Alliance
 
論文紹介:When Visual Prompt Tuning Meets Source-Free Domain Adaptive Semantic Seg...
論文紹介:When Visual Prompt Tuning Meets Source-Free Domain Adaptive Semantic Seg...論文紹介:When Visual Prompt Tuning Meets Source-Free Domain Adaptive Semantic Seg...
論文紹介:When Visual Prompt Tuning Meets Source-Free Domain Adaptive Semantic Seg...
Toru Tamaki
 
FIDO Alliance Osaka Seminar: PlayStation Passkey Deployment Case Study.pdf
FIDO Alliance Osaka Seminar: PlayStation Passkey Deployment Case Study.pdfFIDO Alliance Osaka Seminar: PlayStation Passkey Deployment Case Study.pdf
FIDO Alliance Osaka Seminar: PlayStation Passkey Deployment Case Study.pdf
FIDO Alliance
 
LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアル
LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアルLoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアル
LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアル
CRI Japan, Inc.
 
単腕マニピュレータによる 複数物体の同時組み立ての 基礎的考察 / Basic Approach to Robotic Assembly of Multi...
単腕マニピュレータによる 複数物体の同時組み立ての 基礎的考察 / Basic Approach to Robotic Assembly of Multi...単腕マニピュレータによる 複数物体の同時組み立ての 基礎的考察 / Basic Approach to Robotic Assembly of Multi...
単腕マニピュレータによる 複数物体の同時組み立ての 基礎的考察 / Basic Approach to Robotic Assembly of Multi...
Fukuoka Institute of Technology
 
TaketoFujikawa_物語のコンセプトに基づく情報アクセス手法の基礎検討_JSAI2024
TaketoFujikawa_物語のコンセプトに基づく情報アクセス手法の基礎検討_JSAI2024TaketoFujikawa_物語のコンセプトに基づく情報アクセス手法の基礎検討_JSAI2024
TaketoFujikawa_物語のコンセプトに基づく情報アクセス手法の基礎検討_JSAI2024
Matsushita Laboratory
 
JSAI_類似画像マッチングによる器への印象付与手法の妥当性検証_ver.3_高橋りさ
JSAI_類似画像マッチングによる器への印象付与手法の妥当性検証_ver.3_高橋りさJSAI_類似画像マッチングによる器への印象付与手法の妥当性検証_ver.3_高橋りさ
JSAI_類似画像マッチングによる器への印象付与手法の妥当性検証_ver.3_高橋りさ
0207sukipio
 
FIDO Alliance Osaka Seminar: Welcome Slides.pdf
FIDO Alliance Osaka Seminar: Welcome Slides.pdfFIDO Alliance Osaka Seminar: Welcome Slides.pdf
FIDO Alliance Osaka Seminar: Welcome Slides.pdf
FIDO Alliance
 
【DLゼミ】XFeat: Accelerated Features for Lightweight Image Matching
【DLゼミ】XFeat: Accelerated Features for Lightweight Image Matching【DLゼミ】XFeat: Accelerated Features for Lightweight Image Matching
【DLゼミ】XFeat: Accelerated Features for Lightweight Image Matching
harmonylab
 
FIDO Alliance Osaka Seminar: LY-DOCOMO-KDDI-Mercari Panel.pdf
FIDO Alliance Osaka Seminar: LY-DOCOMO-KDDI-Mercari Panel.pdfFIDO Alliance Osaka Seminar: LY-DOCOMO-KDDI-Mercari Panel.pdf
FIDO Alliance Osaka Seminar: LY-DOCOMO-KDDI-Mercari Panel.pdf
FIDO Alliance
 
CS集会#13_なるほどわからん通信技術 発表資料
CS集会#13_なるほどわからん通信技術 発表資料CS集会#13_なるほどわからん通信技術 発表資料
CS集会#13_なるほどわからん通信技術 発表資料
Yuuitirou528 default
 
FIDO Alliance Osaka Seminar: NEC & Yubico Panel.pdf
FIDO Alliance Osaka Seminar: NEC & Yubico Panel.pdfFIDO Alliance Osaka Seminar: NEC & Yubico Panel.pdf
FIDO Alliance Osaka Seminar: NEC & Yubico Panel.pdf
FIDO Alliance
 

Recently uploaded (14)

This is the company presentation material of RIZAP Technologies, Inc.
This is the company presentation material of RIZAP Technologies, Inc.This is the company presentation material of RIZAP Technologies, Inc.
This is the company presentation material of RIZAP Technologies, Inc.
 
ReonHata_便利の副作用に気づかせるための発想支援手法の評価---行為の増減の提示による気づきへの影響---
ReonHata_便利の副作用に気づかせるための発想支援手法の評価---行為の増減の提示による気づきへの影響---ReonHata_便利の副作用に気づかせるための発想支援手法の評価---行為の増減の提示による気づきへの影響---
ReonHata_便利の副作用に気づかせるための発想支援手法の評価---行為の増減の提示による気づきへの影響---
 
FIDO Alliance Osaka Seminar: CloudGate.pdf
FIDO Alliance Osaka Seminar: CloudGate.pdfFIDO Alliance Osaka Seminar: CloudGate.pdf
FIDO Alliance Osaka Seminar: CloudGate.pdf
 
論文紹介:When Visual Prompt Tuning Meets Source-Free Domain Adaptive Semantic Seg...
論文紹介:When Visual Prompt Tuning Meets Source-Free Domain Adaptive Semantic Seg...論文紹介:When Visual Prompt Tuning Meets Source-Free Domain Adaptive Semantic Seg...
論文紹介:When Visual Prompt Tuning Meets Source-Free Domain Adaptive Semantic Seg...
 
FIDO Alliance Osaka Seminar: PlayStation Passkey Deployment Case Study.pdf
FIDO Alliance Osaka Seminar: PlayStation Passkey Deployment Case Study.pdfFIDO Alliance Osaka Seminar: PlayStation Passkey Deployment Case Study.pdf
FIDO Alliance Osaka Seminar: PlayStation Passkey Deployment Case Study.pdf
 
LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアル
LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアルLoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアル
LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアル
 
単腕マニピュレータによる 複数物体の同時組み立ての 基礎的考察 / Basic Approach to Robotic Assembly of Multi...
単腕マニピュレータによる 複数物体の同時組み立ての 基礎的考察 / Basic Approach to Robotic Assembly of Multi...単腕マニピュレータによる 複数物体の同時組み立ての 基礎的考察 / Basic Approach to Robotic Assembly of Multi...
単腕マニピュレータによる 複数物体の同時組み立ての 基礎的考察 / Basic Approach to Robotic Assembly of Multi...
 
TaketoFujikawa_物語のコンセプトに基づく情報アクセス手法の基礎検討_JSAI2024
TaketoFujikawa_物語のコンセプトに基づく情報アクセス手法の基礎検討_JSAI2024TaketoFujikawa_物語のコンセプトに基づく情報アクセス手法の基礎検討_JSAI2024
TaketoFujikawa_物語のコンセプトに基づく情報アクセス手法の基礎検討_JSAI2024
 
JSAI_類似画像マッチングによる器への印象付与手法の妥当性検証_ver.3_高橋りさ
JSAI_類似画像マッチングによる器への印象付与手法の妥当性検証_ver.3_高橋りさJSAI_類似画像マッチングによる器への印象付与手法の妥当性検証_ver.3_高橋りさ
JSAI_類似画像マッチングによる器への印象付与手法の妥当性検証_ver.3_高橋りさ
 
FIDO Alliance Osaka Seminar: Welcome Slides.pdf
FIDO Alliance Osaka Seminar: Welcome Slides.pdfFIDO Alliance Osaka Seminar: Welcome Slides.pdf
FIDO Alliance Osaka Seminar: Welcome Slides.pdf
 
【DLゼミ】XFeat: Accelerated Features for Lightweight Image Matching
【DLゼミ】XFeat: Accelerated Features for Lightweight Image Matching【DLゼミ】XFeat: Accelerated Features for Lightweight Image Matching
【DLゼミ】XFeat: Accelerated Features for Lightweight Image Matching
 
FIDO Alliance Osaka Seminar: LY-DOCOMO-KDDI-Mercari Panel.pdf
FIDO Alliance Osaka Seminar: LY-DOCOMO-KDDI-Mercari Panel.pdfFIDO Alliance Osaka Seminar: LY-DOCOMO-KDDI-Mercari Panel.pdf
FIDO Alliance Osaka Seminar: LY-DOCOMO-KDDI-Mercari Panel.pdf
 
CS集会#13_なるほどわからん通信技術 発表資料
CS集会#13_なるほどわからん通信技術 発表資料CS集会#13_なるほどわからん通信技術 発表資料
CS集会#13_なるほどわからん通信技術 発表資料
 
FIDO Alliance Osaka Seminar: NEC & Yubico Panel.pdf
FIDO Alliance Osaka Seminar: NEC & Yubico Panel.pdfFIDO Alliance Osaka Seminar: NEC & Yubico Panel.pdf
FIDO Alliance Osaka Seminar: NEC & Yubico Panel.pdf
 

enchant.js meetup Tokyo vol.2 Tutorial