クラスにどんなメソッドが実装されているかどうかわからなくなって困ることがあります。 特にだいぶ時間がたってから手をくわえなければいけなくなったときとか、クラス構成を資料に起こさなければいけないときとか。 クラスの中身をリストアップできたら便利なのになと思って、ヘルプを眺めていると。。 flash.utilsパッケージにdescribeTypeという関数があるんですね。 describeTypeにクラスの型をわたすと、そのクラスに付随する静的プロパティとインスタンスプロパティを記述したXMLオブジェクトを返してくれます。

Spriteクラスのプロパティを表示したい場合には、

var description:XML = describeType(Sprite); trace(description);

<type name="flash.display::Sprite" base="Class" isDynamic="true" isFinal="true" isStatic="true"> <extendsClass type="Class"/> <extendsClass type="Object"/> <accessor name="prototype" access="readonly" type="*" declaredBy="Class"/> <factory type="flash.display::Sprite"> <extendsClass type="flash.display::DisplayObjectContainer"/> <extendsClass type="flash.display::InteractiveObject"/> <extendsClass type="flash.display::DisplayObject"/> <extendsClass type="flash.events::EventDispatcher"/> <extendsClass type="Object"/> <implementsInterface type="flash.events::IEventDispatcher"/> <implementsInterface type="flash.display::IBitmapDrawable"/> <method name="stopDrag" declaredBy="flash.display::Sprite" returnType="void"/> ・ ・ ・ ・ </factory> </type>

このXMLから Spriteクラスは

  • ・Object→EventDispatcher→DisplayObject→InteractiveObject→DiplayObjectContainerという流れでクラスを継承してきている
  • ・IEventDispatcher,IBitmapDrawableというインターフェースを実装している
  • ・stopDragというメソッドが定義されていて、戻り値の型はvoidである。これはSpriteクラスで新しく定義されている。
  • などなど というのがわかります。

    declaredByというアトリビュートに記述されているのが、そのパラメタが定義されたクラスになっているようですね。

    ここでSpriteクラスを継承したExtendedSpriteというクラスを用意してみました。 ExtendedSpriteには

    //斜めに傾き1で移動 public function sidle(value:Number):void { this.x += value; this.y += value; } //縦横比を維持したまま拡大縮小(アクセサで定義してみた) public function set scale(value:Number):void { this.scaleX = this.scaleY = value; }

    というプロパティを新しく定義しました。 これを

    var description:XML = describeType(ExtendedSprite); trace(description);

    で表示してみると、

    <type name="ExtendedSprite" base="Class" isDynamic="true" isFinal="true" isStatic="true"> <extendsClass type="Class"/> <extendsClass type="Object"/> <accessor name="prototype" access="readonly" type="*" declaredBy="Class"/> <factory type="ExtendedSprite"> ・ ・ ・ ・ <method name="sidle" declaredBy="ExtendedSprite" returnType="void"> <parameter index="1" type="Number" optional="false"/> </method> <accessor name="scale" access="writeonly" type="Number" declaredBy="ExtendedSprite"/> ・ ・ ・ ・ </factory> </type>

    新しく定義されたプロパティもしっかり表示されています。declaredByの値がExtendedSpriteになっている所が該当箇所ですね。 ここだけ抜き出しいけばリスト表示も簡単にできそうです。AS3になってからXMLにアクセスするのが楽になっていいですね。

HTML5飯