[Flash] Box2DFlashAS3 v2.0.2 を学習 (1)
動作確認環境:
- Windows7 64bit
- Adobe AIR SDK 22
- Java7
Physics Engine(物理演算エンジン)を学んでみるよ。
Research
ActionScript3向けのPhysicEngineは複数ある。『ActionScript3.0ライブラリ入門(翔泳社 2010)』によるとBox2Dがいいようだ。いろんな環境で使えるから。
- Box2DのActionScript3版は Box2DFlashAS3 とか Box2DFlash とか呼ばれている。最新v2.1aはアルファ版らしい。v2.0.2は安定版。
- JavaScript版Box2DWebは Box2DFlash v2.1aを機械的にconvert
- C++版本家はv2.3.1(2014)が最新
https://sourceforge.net/projects/box2dflash/files/box2dflash/ によるリリース日一覧。
| version | date |
|---|---|
| Box2DFlashAS3_2.1a | 2010-03-28 |
| Box2DFlashAS3_2.0.2 | 2008-12-09 |
| Box2DFlashAS3_2.0.1 | 2008-06-17 |
| Box2DFlashAS3_2.0.0 | 2008-04-17 |
| Box2DFlashAS3_1.4.3.1 | 2008-01-09 |
書籍でBox2DのAS3日本語解説は以下だけ。
- 書籍『ActionScript3.0ライブラリ入門(翔泳社 2010)』
- Box2DFlash v2.0.2 (v2.1aとの違いも随時解説)
Web上でBox2DのAS3日本語解説を探してみると、以下があった。
Box2DFlash
- Web記事 2008-02-03 Box2Dユーザマニュアル
- C++版のマニュアルを日本語訳。C++版は2008-03-08にv2.0.0リリースという日付から推測すると、これはv2ではなくv1の解説だな。
- Web記事 2008-06-03 Box2DでActionScript物理プログラミング 技術評論社
- v2.0.0 (2008年6月3日当時の最新)
- Web記事 2009-04-28 Box2DFlashAS3 の単純なサンプルと使い方 (2.0.2版)
- v2.0.2
Box2dFlashAS3 はバージョンによって API が激しく変わっていてなかなか困りものだ。2.0.0 なら gihyo.jp の 特集:Box2DでActionScript物理プログラミング が分かりやすくてよいんだけど、2.0.1 で重要な API が改名されていて、そのことがパッケージには書いていない。
- v2.0.2
- Web記事 2009-08-25 Box2D(Box2DFlashAS3)によるActionScript物理シミュレーション | Flash | HapHands
- v2.0.2
技術評論社の連載ではBox2Dはver2.0.0。本記事ではBox2Dは2.0.2
- v2.0.2
- Web記事 2009-05-21 Box2DFlashAS3を使ってみる
- v2.0.2 ジョイントによるパーツ結合
- Web記事 2010-01-04 Box2DFlashAS3でブロック崩しゲームを作る - 遥かへのスピードランナー
- v2.0.2
ブロック崩しは、技術評論社のサンプルプログラムを改造
- v2.0.2
- Web記事 2013-02-21 【連載】Starlingフレームワークを用いたStage3Dによる2Dアニメーション 第7回 StarlingフレームワークとBox2Dで物理演算シミュレーションを行う
- v2.1a
スクリプト005 動的な剛体50個を静的な剛体の上に落下させる物理シミュレーション
- v2.1a
- Web記事 Box2DFlashAS3 に引力・斥力を組み込んでみるテスト
QuickBox2D
- Web記事 2011-04-15 QuickBox2Dがいい感じみたいなので使ってみました
- QuickBox2D 1.1 + Box2DFlashAS3 v2.0.2
Box2DFlashAS3を簡単に利用するためのライブラリ「QuickBox2D」を見つけました。QuickBox2D公式サイトにも記述されてるとおり、Box2DFlashAS3は2.0.2を使用しましょう。
- QuickBox2D 1.1 + Box2DFlashAS3 v2.0.2
- Web記事 [AS3.0] QuickBox2Dを試すのだ! (1)
- QuickBox2D 1.1 + Box2DFlashAS3 v2.0.2
QuickBox2Dコンストラクタの引数はSpriteじゃダメとか、サイズの単位が 1=30px とか。ちょっとクセがあるな。QuickBox2D.as 内のタイプミス? 「fillAlpha」となるべき部分で「fillAllpha」となっている箇所が4箇所ある。
- QuickBox2D 1.1 + Box2DFlashAS3 v2.0.2
消滅した記事
- [消滅]Web記事 2008-01-28 Box2DflashAS3で F I C の文字を降らす
- [消滅]Web記事 2008-01-29 Box2DFlashAS3での衝突判定
- [消滅]Web記事 2008-01-28 WCAN mini ActionScript Vol.4 で発表したやつ Box2DFlashAS3
- [消滅]Web記事 2008-02-02 揺れシミュレータの作り方
- 日付からv1
- 2008-02-06 改善シミュレータ
- [消滅]Web記事 2008-05-17 Box2DFlashAS3(2.0.0)を使ってみる - その5(Joint編)
- [消滅]Web記事 2009-06-28 blog.alumican.net » Blog Archive » QuickBox2D はじめの第一歩
v2.1aの日本語解説が少ないね。v2.1aはアルファ版 というのも気になる。v2.0.2がいいみたい。
Get
それではダウンロードしよう。
http://www.box2dflash.org/download で v2.0.2 を取得。 Older releaseのリンクから v2.0.0 も取得。
Learn
評判のよい Box2DでActionScript物理プログラミング 技術評論社 の記事を読む。
第1回 Box2Dを使ってみよう
これはBox2D付属サンプルを見るだけ。
第2回 物理エンジンをセットアップし,箱を落とすFlashを作る
提供されているソースコード DropBox.as は、 Box2DFlash v2.0.2 そのままではコンパイルが通らない。
$ mxmlc -source-path='C:\home\as3\Box2DFlashAS3_2.0.2' DropBox.as
Error: Call to a possibly undefined method CreateStaticBody through a reference with static type b2World.
Error: Call to a possibly undefined method CreateDynamicBody through a reference with static type b2World.ver 2.0.0 では CreateStaticShape() と CreateDynamicShape() に分かれていたが、 ver 2.0.1 からは CreateShape() に統一された
http://tech.nitoyon.com/ja/blog/2009/04/28/box2dflashas3-2-0-2/
Box2DFlashAS3_2.0.2\Box2D\Dynamics\b2World.as だと同様に CreateBody() に統一されてるようだ。じゃあDynamicとStaticはどこで設定するのか?
(動く物体の場合のみ) 重さを計算する
SetMassFromShapes()を実行。
すでにSetMassFromShapes()記述済みだったので「CreateBody()に統一」だけでv2.0.2コンパイルOK。
--- DropBox.as 2019-05-26 11:22:06.618219900 +0900
+++ DropBox_v202.as 2019-05-26 11:13:54.547075000 +0900
@@ -53,3 +53,3 @@
// 床を動かない物体として作る
- var floor:b2Body = world.CreateStaticBody(floorBodyDef);
+ var floor:b2Body = world.CreateBody(floorBodyDef);
floor.CreateShape(floorShapeDef);
@@ -71,3 +71,3 @@
// 箱を動く物体として作る
- var boxBody:b2Body = world.CreateDynamicBody(boxBodyDef);
+ var boxBody:b2Body = world.CreateBody(boxBodyDef);
boxBody.CreateShape(boxShapeDef);第3回 ~ 第6回 までは同じ修正だけでいい。
第7回 円を落として星を飛び散らせる
以下の修正で同じになったと思う。
--- KiraKira.as 2019-06-02 18:49:43.634187500 +0900
+++ KiraKira_v202.as 2019-06-02 19:00:37.038560100 +0900
@@ -56,3 +56,3 @@
// 床を動かない物体として作る
- var floor:b2Body = world.CreateStaticBody(floorBodyDef);
+ var floor:b2Body = world.CreateBody(floorBodyDef);
floor.CreateShape(floorShapeDef);
@@ -62,5 +62,5 @@
contactListener.parent = this;
- world.SetListener(contactListener);
+ world.SetContactListener(contactListener);
@@ -133,3 +133,3 @@
- var star:b2Body = world.CreateDynamicBody(starDef);
+ var star:b2Body = world.CreateBody(starDef);
star.CreateShape(starShapeDef);--- ContactListener.as 2019-06-02 18:49:48.364458100 +0900
+++ ContactListener_v202.as 2019-06-02 19:28:17.566536900 +0900
@@ -13,3 +13,3 @@
// 衝突時の力の大きさをもとに、エフェクトを発生させる数を計算する
- var num:int = point.normalForce / 10 + 1;
+ var num:int = point.normal.Length() + 1;
// 計算ミスで大きな力がかかることがあるので、値を10までに制限する
0 件のコメント:
コメントを投稿