Scroll

MENU

2017.05.21 Lab

Three.jsとCannon.jsを使ってだるま落としをつくってみた

今回はThree.jsを使って簡単なゲームコンテンツ「だるま落とし」を作ってみましたので、その制作談です。

 

なぜ、だるま落とし?

先日Three.js入門のハンズオンセミナーにて物理演算のオススメのライブラリを聞いたところ
「Cannon.js」を教えていただいたので、実際に使ってみようと物理演算が必要になる「だるま落とし」を作ろうということになりました。

 

完成デモ

制作したデモです!

だるま落とし
http://moon.junni.jp/daruma/

 

実装について

ゲーム部分の実装は割愛して、だるま落としの物理演算設定の部分だけ簡単に掲載します。
 

ワールドの設定

物理演算の世界での設定を行います。

var world = new CANNON.World();
//重力設定
world.gravity.set(0, -10, 0);
//衝突イベント発生させる
world.broadphase = new CANNON.NaiveBroadphase();

 

剛体同士の衝突反応

剛体同士の衝突反応を細かく設定して、なるべくブロックやハンマーがリアルな動きにみえるように調整します。

//ブロックと床の判定
var mat = new CANNON.ContactMaterial(materials.base, materials.block, { friction: 0.01, restitution: 0});
world.addContactMaterial(mat);
//ブロック同士の判定
var mat2 = new CANNON.ContactMaterial(materials.block, materials.block, { friction: 0, restitution: 0.0});
world.addContactMaterial(mat2);
//ハンマーとブロックの判定
var mat3 = new CANNON.ContactMaterial(materials.hammer, materials.block, { friction: 10.0, restitution: 0.0, frictionEquationRelaxation:0, contactEquationRelaxation:0 });
world.addContactMaterial(mat3);

当たり判定

剛体同士の衝突反応を細かく設定して、なるべくブロックやハンマーがリアルな動きにみえるように調整します。

//頭ブロック(黒)に対して床についたときにイベントを起こします。
phyList.block[i].addEventListener("collide", function(e) {
  //事前に地面のBodyに対してname で名前を設定しておきます
  if(e.contact.bi.name == "base"){
    game.headStatus = setTimeout(function(){
      if(game.deathCount==itemList.block.children.length-1){
        game.clear();
      }else{
        game.end();
      }
    },500);
  }
});

 

こんな失敗ありましたログ

■何もしてないのにブロックが崩壊する

→ ブロック同士の反発が強く、ステージに出現するときの演出で最初から落ちてしまいました。。。

■ブロックが床にめり込む

→ ハンマーで打ち出した際、一番下のブロックと床の摩擦で行き場に迷ったブロックが沈み込んでしまったようです。。。

 

今回記事の内容をLTで発表予定です(今夜)
Three.js入門者LT大会

資料は発表後ここでも載せようと思います。

 

 

Back to List

Google Maps

  • 東京メトロ 丸ノ内線「新宿御苑前」駅
    2番出口より徒歩5分

【個人情報の取り扱いについて】

株式会社ジュニ(以下「当社」)は、以下のとおり個人情報保護方針を定め、個人情報保護の仕組みを構築し、全従業員に個人情報保護の重要性の認識と取組みを徹底させることにより、個人情報の保護を推進致します。

個人情報の管理
当社は、お客さまの個人情報を正確かつ最新の状態に保ち、個人情報への不正アクセス・紛失・破損・改ざん・漏洩などを防止するため、セキュリティシステムの維持・管理体制の整備・社員教育の徹底等の必要な措置を講じ、安全対策を実施し個人情報の厳重な管理を行ないます。
個人情報の利用目的
お客さまからお預かりした個人情報は、当社からのご連絡や業務のご案内やご質問に対する回答として、電子メールや資料のご送付に利用いたします。
個人情報の第三者への開示・提供の禁止
当社は、お客さまよりお預かりした個人情報を適切に管理し、次のいずれかに該当する場合を除き、個人情報を第三者に開示いたしません。

  • お客さまの同意がある場合
  • お客さまが希望されるサービスを行なうために当社が業務を委託する業者に対して開示する場合
  • 法令に基づき開示することが必要である場合
個人情報の安全対策
当社は、個人情報の正確性及び安全性確保のために、セキュリティに万全の対策を講じています。
ご本人の照会
お客さまがご本人の個人情報の照会・修正・削除などをご希望される場合には、ご本人であることを確認の上、対応させていただきます。
法令、規範の遵守と見直し
当社は、保有する個人情報に関して適用される日本の法令、その他規範を遵守するとともに、本ポリシーの内容を適宜見直し、その改善に努めます。
お問い合せ
当社の個人情報の取扱に関するお問い合せは下記までご連絡ください。
株式会社ジュニ
〒160-0022 東京都新宿区新宿1-10-2 黒新ビル2F
TEL:03-5295-8445 FAX:050-3737-3451
Mail: info@junni.jp

page top