2019-06-02

[Flash] convert from as3 to swc

[Flash] AS3ソースコードをswcに変換

動作確認環境:

  • Windows7 64bit
  • Adobe AIR SDK 22
  • Java7

[話者] Box2DFlashはswcになってなくて、as3ソースで提供されている。

FlashDevelopでBox2DFlashの補完するには、解凍ディレクトリを [Project>Properties>Compiler Options>External Libraries] にオプション指定すればできたが、コンパイルするときは[Project>Properties>Compiler Options>Additional Compiler Options] に指定する必要があった。

オプション指定も面倒だし、補完速度もswcにしたほうが早いようだ。swcに変換しよう。

[合いの手] どうやったらSWCを作れるの?

[話者] swc変換には、AIR SDKに入っているcompcを使う。

参考

それではswcをビルド。

$ cd Box2DFlashAS3_2.0.2/
$ ls
  Box2D/    HelloWorld.as   HelloWorld.swf  Main.as       PhysTest.swf  TestBed/
  General/  HelloWorld.fla  License.txt     PhysTest.fla  ReadMe.txt
$ find Box2D -name "*.as" | sed -e 's@/@.@g' -e 's@^@   <class>@' -e 's@\.as@</class>@' >> flex-config.xml
$ vi flex-config.xml
$ compc -load-config+=flex-config.xml
読み込みの設定 : C:\home\bin\FlashDevelop5\Apps\air22\frameworks\flex-config.xml
読み込みの設定 : C:\home\as3\Box2DFlashAS3_2.0.2\flex-config.xml

7.392 秒で C:\home\as3\Box2DFlashAS3_2.0.2\Box2DFlashAS3_2.0.2.swc に 142610 バイトが書き込まれました

コマンドラインで

$ compc -output Box2DFlashAS3_2.0.2.swc -include-classes Box2D.Common.Math.b2Vec2

とか指定することもできたようだが、-include-classes の指定が多いので今回はconfig.xmlでオプション指定した。include-classesの一覧作成は上記のshellでやってるよ。

config.xml

<?xml version="1.0" encoding="utf-8"?>
<flex-config>
    <compiler>
        <optimize>true</optimize>
        <source-path>
            <path-element>.</path-element>
        </source-path>
    </compiler>
    <output>Box2DFlashAS3_2.0.2.swc</output>
    <include-classes>
        <class>Box2D.Collision.b2AABB</class>
        <class>Box2D.Collision.b2Bound</class>
        <class>Box2D.Collision.b2BoundValues</class>
        <class>Box2D.Collision.b2BroadPhase</class>
        <class>Box2D.Collision.b2BufferedPair</class>
        <class>Box2D.Collision.b2Collision</class>
        <class>Box2D.Collision.b2ContactID</class>
        <class>Box2D.Collision.b2ContactPoint</class>
        <class>Box2D.Collision.b2Distance</class>
        <class>Box2D.Collision.b2Manifold</class>
        <class>Box2D.Collision.b2ManifoldPoint</class>
        <class>Box2D.Collision.b2OBB</class>
        <class>Box2D.Collision.b2Pair</class>
        <class>Box2D.Collision.b2PairCallback</class>
        <class>Box2D.Collision.b2PairManager</class>
        <class>Box2D.Collision.b2Point</class>
        <class>Box2D.Collision.b2Proxy</class>
        <class>Box2D.Collision.b2Segment</class>
        <class>Box2D.Collision.b2TimeOfImpact</class>
        <class>Box2D.Collision.ClipVertex</class>
        <class>Box2D.Collision.Features</class>
        <class>Box2D.Collision.Shapes.b2CircleDef</class>
        <class>Box2D.Collision.Shapes.b2CircleShape</class>
        <class>Box2D.Collision.Shapes.b2FilterData</class>
        <class>Box2D.Collision.Shapes.b2MassData</class>
        <class>Box2D.Collision.Shapes.b2PolygonDef</class>
        <class>Box2D.Collision.Shapes.b2PolygonShape</class>
        <class>Box2D.Collision.Shapes.b2Shape</class>
        <class>Box2D.Collision.Shapes.b2ShapeDef</class>
        <class>Box2D.Common.b2Color</class>
        <class>Box2D.Common.b2Settings</class>
        <class>Box2D.Common.Math.b2Mat22</class>
        <class>Box2D.Common.Math.b2Math</class>
        <class>Box2D.Common.Math.b2Sweep</class>
        <class>Box2D.Common.Math.b2Vec2</class>
        <class>Box2D.Common.Math.b2XForm</class>
        <class>Box2D.Dynamics.b2Body</class>
        <class>Box2D.Dynamics.b2BodyDef</class>
        <class>Box2D.Dynamics.b2BoundaryListener</class>
        <class>Box2D.Dynamics.b2ContactFilter</class>
        <class>Box2D.Dynamics.b2ContactListener</class>
        <class>Box2D.Dynamics.b2ContactManager</class>
        <class>Box2D.Dynamics.b2DebugDraw</class>
        <class>Box2D.Dynamics.b2DestructionListener</class>
        <class>Box2D.Dynamics.b2Island</class>
        <class>Box2D.Dynamics.b2TimeStep</class>
        <class>Box2D.Dynamics.b2World</class>
        <class>Box2D.Dynamics.Contacts.b2CircleContact</class>
        <class>Box2D.Dynamics.Contacts.b2Contact</class>
        <class>Box2D.Dynamics.Contacts.b2ContactConstraint</class>
        <class>Box2D.Dynamics.Contacts.b2ContactConstraintPoint</class>
        <class>Box2D.Dynamics.Contacts.b2ContactEdge</class>
        <class>Box2D.Dynamics.Contacts.b2ContactRegister</class>
        <class>Box2D.Dynamics.Contacts.b2ContactResult</class>
        <class>Box2D.Dynamics.Contacts.b2ContactSolver</class>
        <class>Box2D.Dynamics.Contacts.b2NullContact</class>
        <class>Box2D.Dynamics.Contacts.b2PolyAndCircleContact</class>
        <class>Box2D.Dynamics.Contacts.b2PolygonContact</class>
        <class>Box2D.Dynamics.Joints.b2DistanceJoint</class>
        <class>Box2D.Dynamics.Joints.b2DistanceJointDef</class>
        <class>Box2D.Dynamics.Joints.b2GearJoint</class>
        <class>Box2D.Dynamics.Joints.b2GearJointDef</class>
        <class>Box2D.Dynamics.Joints.b2Jacobian</class>
        <class>Box2D.Dynamics.Joints.b2Joint</class>
        <class>Box2D.Dynamics.Joints.b2JointDef</class>
        <class>Box2D.Dynamics.Joints.b2JointEdge</class>
        <class>Box2D.Dynamics.Joints.b2MouseJoint</class>
        <class>Box2D.Dynamics.Joints.b2MouseJointDef</class>
        <class>Box2D.Dynamics.Joints.b2PrismaticJoint</class>
        <class>Box2D.Dynamics.Joints.b2PrismaticJointDef</class>
        <class>Box2D.Dynamics.Joints.b2PulleyJoint</class>
        <class>Box2D.Dynamics.Joints.b2PulleyJointDef</class>
        <class>Box2D.Dynamics.Joints.b2RevoluteJoint</class>
        <class>Box2D.Dynamics.Joints.b2RevoluteJointDef</class>
    </include-classes>
</flex-config>

これで Box2DFlashAS3_2.0.2.swc が作成された。

これをFlashDevelopで[右クリック>Add To Library]すると、methodやclass名を補完可能になる。 AS3ソースコードのときより補完が早くなった感じだぞ。

0 件のコメント:

コメントを投稿

人気記事