ホーム > タグ > Box2D

Box2D

2Dのバスケ フリースローゲーム思いついてみる。

前エントリに続いて、
某組曲ボーナスゲームも作り途中ですが、
Box2D使えば、2Dなフリースローゲームも簡単に作れるんじゃないだろか。

某組曲ボーナスゲームより考えることが少なそうだ。

というわけでフリースロー用の素材を描いて、いろいろ考えてみた。
目標はこんなの↓

ずっとみてても入ることはありません。
もがき続けます。

ボールはFlashのトゥイーンでがしがし不自然に動かしました(^-^;;
この辺をBox2Dにやらせれば、絶対気持ちいいぜ!

しかし素材作るのが大変だ・・・。
今回はフリーのSimpleDotXで描きました。
(あれほどベジェ曲線やるといっておきながら・・・)

投げる人

実際にスクリプトの方もちょっとかいてみた。
うん、いけそうだ! (↓まだ、作り中だから絵だけです。)

フリースローひな形

フリースローひな形

いろいろ平行してがんばっていこう!

Box2D リンケージシンボルでアニメーションさせてダッシュ&ジャンプ

Box2Dで、迷○組曲ボーナスステージもどき制作日記の続きです。

今回はFlashで作成したアニメーションのシンボルをリンケージさせて、
実際に表示されるキャラクターを動かしてみました。
このキャラクターは、前作ったコレで使ったやつの使い回しで、我らがドットりえッチです。
今回もまだエンドレスですw

画面をクリックして、「←」「→」で左右移動、「s」でジャンプです。

今回は、Flashでリンケージさせたシンボルを組み込んで、
Flex3でコンパイルする際に組み込んでいます。

ACTIONSCRIPT:
  1. [Embed(source = 'LabylinsSeed.swf', symbol = 'riecchi') ]
  2.         private var Riecchi:Class;
  3.         private var riecchi:MovieClip;

外部のFlashを組み込んで、シンボルをクラスとして使えるようにするには
[Embed(source='読み込むファイル名', symbol='リンケージ時に指定したクラス名')]

でOKです。

今回読み込んだLabylinsSeed.swfは以下のようなFlashです。

上からシンボル化したMovieClipで、それぞれを
"stop", "low", "middle", "high", "max", 飛んでるのが "jump"と命名してあります。

それとは別の、riecchiというMovieClipをシンボル化しています。
このMovieClipは、同じように"stop", "low","middle" ... と名前をつけたフレームをもち、
それぞれのフレームに上記でシンボル化したMovieClipをおいています。

↓現在加わっている力から、どのフレームのアニメーションを動かすか、
どのフレームで gotoAndStop() させるかを指示しています。

ACTIONSCRIPT:
  1. var vel_x = Math.abs(square.m_linearVelocity.x);
  2.                 var status:String = "stop";
  3.                 if( vel_x <0.5) status = "stop";
  4.                 else if(vel_x <2) status = "low";
  5.                 else if(vel_x <5) status = "middle";
  6.                 else status = "high"
  7.                
  8.                 if(status != square.m_userData.speed_status){
  9.                     riecchi.gotoAndStop(status);
  10.                     square.m_userData.speed_status = status;
  11.                 }

こうすることで、速度によってアニメーションを変えることができました。
ちなみにmaxは使わなかった。

方向転換時に慣性のような力を残す、フラットをとると減点なども追加しました。
前のコードに試行錯誤しながら作ったので、ソース汚いっす。

次回はグラフィックをもっと追加してみようかな・・・続く!!

↓勢いのあるソース全部
Continue reading

Box2D で 降りしきる音符を拾いまわる箱

前回作ったものに、pngファイルを重ねて表示しました。
動き回る箱が、音符を拾うゲームです。
箱組曲ですねw

Box2Dで落ちる音符が自然でいい感じです。
だいぶ遊べるものに近づいてきました。
ちなみにエンドレスです。ウハハ!拾い続けるのだ!

画面をクリックして、「←」「→」で左右移動、「s」でジャンプです。
今回やっと、無限ジャンプをさせなくしました。

次回は、箱生命体を改め、ちゃんと歩く何か動かそうかなw
それから音符の種類も増やそうと思っています。

今回は、外部ファイルを埋め込んで、
Spriteとして表示できるようにしています。

埋め込み部

ACTIONSCRIPT:
  1. [Embed(source='hako.png')]
  2.     private var hakoImg:Class;
  3.     private var spt:Sprite;
  4.        
  5.     [Embed(source = 'onpu.png')]
  6.     private var onpuImg:Class;

表示できるようにして追加

ACTIONSCRIPT:
  1. var bmp:Bitmap = new hakoImg();
  2.     // 中心座標と重なるように。
  3.     bmp.x = -18;
  4.     bmp.y = -36;
  5.     spt = new Sprite;
  6.     spt.visible = false;
  7.     spt.addChild(bmp);
  8.     addChild(spt);

「箱はどんなことがあっても転ばない」というところで悩みました。
毎フレーム傾きを戻してやることにしました。

ACTIONSCRIPT:
  1. // 箱生命体は、決して倒れない!
  2. var xform:b2XForm = square.GetXForm();
  3. square.SetXForm(xform.position, 0);

書いてみると2行でしたが、果たしてこれが正しいやり方なのか・・・

あとは、地面にいるときだけジャンプ可能にしたのは、
「地面と衝突しているかどうか」でフラグ判定しているだけです。

悩みながらやったのでソースが、だんだん荒くなってきた。

続く!

↓ソース全部

Continue reading

Box2d で降りしきる箱と戯れる箱

前回に続きまして、四角の一人四角遊びです(?)

画面をクリックした後、「←」「→」で左右移動、「s」キーでジャンプです。
前回同様、「s」キー連打で多段ジャンプ!

↓参考にさせていただきました。
Box2Dサンプル maskBitsによる衝突フィルタリング

今回やりたかったのは、上からものを落として、
何回かぶつかったら、部屋から立ち去らせるということ。

具体的には、
3回、床との衝突を検知したら、
落ちてくる箱の衝突フィルタの値を変更するということをやりたかった。

箱を定義するときにIDを指定しておくことで、何と何が衝突したか検知できる。

ACTIONSCRIPT:
  1. var floorBodyDef:b2BodyDef = new b2BodyDef();
  2.     // 床のIDを floor としておく
  3.     floorBodyDef.userData = new Object;
  4.     floorBodyDef.userData.id = "floor";
  5.     floorBodyDef.position.Set(6, 8);

3回衝突を検知したら、maskBitsの値を0x00に変更して、誰とも衝突しないようにする。
Box2Dのソースから追って、filterを再度ゲットできるところを探したんだけど、
これでよかったんだろうか。

ACTIONSCRIPT:
  1. for (var ce:b2ContactEdge = floor.m_contactList; ce != null; ce = ce.next) { 
  2.     var obj1:b2Body = ce.contact.GetShape1().m_body;//1つ目のオブジェクト
  3.     var obj2:b2Body = ce.contact.GetShape2().m_body;//2つ目のオブジェクト
  4.     if(obj1.m_userData && obj2.m_userData && ce.contact.GetManifoldCount() == 1){ 
  5.         if(obj2.m_userData.id == "dropbox"){
  6.             if (obj2.m_userData.crash> 2){
  7.                 shape = obj2.GetShapeList();
  8.                 shape.m_filter.maskBits = 0x00;
  9.             }else {
  10.                 obj2.m_userData.crash++;
  11.             }
  12.         } 
  13.     }
  14. }

だいぶ作りたいものに近づいてきました!
次はShapeで絵をちゃんと重ねよう!

↓ソース全部

Continue reading

Box2Dで 四角の一人ボール遊び

前回に引き続きBox2DFlashAS3で遊んでいます。
四角の一人ボール遊びです。

画面をクリックした後、「←」「→」で左右移動、「s」キーでジャンプです。
「s」キー連打で多段ジャンプ可w

前回より、ちゃんと部屋のサイズとか考えて作りました。天井は吹き抜けですが。

四角を右と左に動かす際、加速の感じを出すために、
イーズアウト・イーズインの公式を使いました。

といっても見つけてきただけです。
■イージングの公式いろいろ
http://www.actionscript.org/forums/showthread.php3?t=42833
■Flash Tweener の イージングパターン
http://hosted.zeh.com.br/tweener/docs/en-us/misc/transitions.html

easeInOutQuadの式

ACTIONSCRIPT:
  1. /**
  2.          * t = time
  3.          * b = beginning value
  4.          * c = change in value
  5.          * d = duration
  6.          */
  7.         public function easeInOutQuad(t:Number, b:Number, c:Number, d:Number):Number {
  8.             if ((t/=d/2) <1) return c/2*t*t + b;
  9.             return -c/2 * ((--t)*(t-2) - 1) + b;
  10.         };

この関数を使ってm_linearVelocityで与える力の加減を計算しています。
キーを離したときの減速は、Box2Dの摩擦計算に任せているので何もしないでOK。ラクチン。

昔の人はこういうライブラリなしで、ファミコン容量でゼロからマリオとか作ったわけよね。

スゲー!

↓ ソース全部
Continue reading

物理エンジン Box2DFlashAS3 を使ってみる

■物理エンジン for Flash → http://box2dflash.sourceforge.net/

Box2DFlashで作られた引越し奉行というゲームみてから気になってた。
ちょくちょくいろんなところで、ゲームに使われている。
おもしろそうなので手を出してみた。

とりあえず参考にしたサンプルを、ちょっと改造して動かす。

最初に画面をクリックしてください。
床と円を2つ設置。「←」「↑」「→」キーで円に力が加わります。

物理エンジンをセットアップし,箱を落とすFlashを作る
ここのサンプルコードを元に改造しました。

Master of None
オワタの冒険のサンプルコードを参考にさせていただきました。

ドキュメント少ないですね・・・みなさん何みて作ってんだろ・・・
とりあえず。わかったのは、
worldとbox定義の仕方と、m_linearVelocityで力を加えられることくらいか。。

Continue reading

Home > Tags > Box2D

リンク
chocolataste-planner
millon

サーチ
Feeds
Meta
blog ranking ブログランキング・にほんブログ村へ
にほんブログ村 テクノラティのお気に入りに追加する

Return to page top