2014年3月17日月曜日

Andengine Vertex Helperを試してみた

AndEngineの物理Extentionに標準で付いているのBodyの形状は
四角と円は「createBoxBody」、「createCircleBody」で簡単に作れるが、それ以外だと
「createPolygonBody」でVector2の配列を作ってメソッドに渡す必要がある

例えば三角形の画像に合わせて三角形の接触判定を持つ物体が欲しいときは
三つの頂点の座標を与えてやらないといけないのだ。

複雑な形の物体を追加する場合は結構きついことになるのは想像に難しくない
anglybirdsみたいなのとかね



そこで有志が作成したツール「Andengine Vertex Helper」というのを見つけた
(今のところ複雑な構造の物理物体を使ったアイデアがあるわけではないが)

試しに使ってみることにした
たぶん以下にあるのが最新ソース置き場だと思う
https://code.google.com/p/andengine-vertex-helper/downloads/list

ダウンロードしたmsiファイルを実行してインストール
インストールフォルダにある「avhelper.exe」を実行する

こんな感じ

左上のファイルからBody設定したいスプライトの画像を選ぶ


使い方はかなり直観的でわかりやすい
追加した頂点は、ドラッグで移動できる



あとは好きな形に頂点を調節して
左のテキストボックスに出ているコードをコピーして、Javaのコードに張り付ければいい

ただし、参照する変数としてwidthとheightがあるので、実際に使うときは以下のようにすればいい
「PIXEL_TO_METER_RATIO_DEFAULT」って定数はおまじないみたいなもの(物理系とスプライト系で座標管理が異なるらしい)ので気にしない。
これで好きな形のBodyを作ることができるようになりました!

private static Body createHexagonBody(final PhysicsWorld pPhysicsWorld, final IAreaShape pAreaShape, final BodyType pBodyType, final FixtureDef pFixtureDef) {
  final float width = pAreaShape.getWidthScaled() / PIXEL_TO_METER_RATIO_DEFAULT;
  final float height = pAreaShape.getHeightScaled() / PIXEL_TO_METER_RATIO_DEFAULT;
  
  final Vector2[] vertices = {
    new Vector2(-0.45312f*width, -0.23438f*height),
    new Vector2(-0.01562f*width, -0.48438f*height),
    new Vector2(+0.35938f*width, -0.31250f*height),
    new Vector2(+0.39062f*width, +0.21875f*height),
    new Vector2(-0.01562f*width, +0.50000f*height),
    new Vector2(-0.42188f*width, +0.23438f*height),
  };

  return PhysicsFactory.createPolygonBody(pPhysicsWorld, pAreaShape, vertices, pBodyType, pFixtureDef);
 }




0 件のコメント:

コメントを投稿