ActionScript 3.0入門ノート CS4でタグ「extends」が付けられているもの

 シンボルにもカスタムクラスを関連付けることができます。この手法は先に出版したAS3入門ノートでは解説していましたが、今回の完全改訂版では割愛した内容です。その内容をここで補足したいと思います。

 シンボルからインスタンスを作る方法は「Section07-01 表示オブジェクトの追加」に説明してあるので、ここが補足箇所の候補になりますが(p.211)、この時点ではクラス定義や継承について学んでいません。
 シンボルとカスタムクラスを関連付ける方法はドキュメントクラスと同じ考え方なので、「Section08-06 ドキュメントクラス」の最後のp.486が適当でしょう。ここに以下の原稿を追加します。

シンボルが継承するクラス 追加原稿 p.486
 ドキュメントクラスと同じようにシンボルにもカスタムクラスを関連付けることができます。シンボルにカスタムクラスを関連付けるには、シンボルのプロパティパネルでリンケージ書き出しの設定を行い、クラスフィールドにカスタムクラスを指定します。

fig 08-06-04.jpg
シンボルのリンケージ書き出し設定で関連付けるクラスを指定します

 たとえば、次のFlowerAクラスをシンボルに関連付けると、このシンボルから作ったインスタンスをステージに追加するだけで回転するようになります。このとき、ムービークリップシンボルに関連付けるカスタムクラスは、必ずMovieClipクラスを継承しなければなりません。
 インスタンスはnew FlowerA()で作ることができますが、普通にライブラリからステージにドロップして作ってもかまいません。

[:script:]シンボルに関連付けるFlowerAクラス
package {
	import flash.display.MovieClip;
	import flash.events.Event;

	public class FlowerA extends MovieClip {
		public function FlowerA() {
			addEventListener(Event.ENTER_FRAME, enterFrameHandler );
		}
		protected function enterFrameHandler(eventObj:Event):void {
			rotation += 3;
		}
	}
}

fig 08-06-05.jpg
インスタンスを作ってステージに追加するだけで回転します。→swfを試す
ファイルをダウンロードするextendSymbol.zip

(section08-03 クラス継承の補足)

 ※複数のクラスを継承する方法について補足します。p.260のextendsの補足説明になります。

複数のクラスを継承する
 MovieClipクラスはSpriteクラスやDisplayObjectクラスなどの複数のクラスを継承していますが、このように複数のクラスを継承したい場合はどうすればよいのでしょうか。結論から言えば1つのサブクラスは1つのスーパークラスしか指定できません。たとえば、MyClassAとMyClassBの両方を継承したMyClassCを作りたいとき、次のようにスクリプトを書くことはできません。

間違ったスクリプト1
class MyClassC extends MyClassA, MyClassB; 
間違ったスクリプト2
class MyClassC extends MyClassB extends MyClassA; 

 MyClassAとMyClassBの両方を継承したMyClassCを作りたいならば、まず、MyClassAを継承したMyClassBを作り、次にMyClassBを継承したMyClassCを作るという方法をとります。たとえば、次のMyClassCではスーパークラスであるMyClassBのtestB()だけでなく、そのMyClassBのスーパークラスのMyClassAのtestA()も利用できます。
 このように親がさらにその親を継承していくという手法によって結果としてサブクラスが複数のクラスを継承できます。

[:script:]MyClassAクラス
package {
	public class MyClassA {
		public function testA() {
			trace("test A");
		}
	}
}

[:script:]MyClassAクラスを継承しているMyClassBクラス
package {
	public class MyClassB extends MyClassA {
		public function testB() {
			trace("test B");
		}
	}
}

[:script:]MyClassBクラスを継承しているMyClassCクラス
package {
	public class MyClassC extends MyClassB {
		public function testC() {
			testA();//MyClassAから継承しているメソッド
			testB();//MyClassBから継承しているメソッド
		}
	}
}

 なお、インスタンスが特定のクラスを継承しているかどうかはis演算子を使って判断できます。

[:script:]指定のクラスを継承しているかどうか調べる
var mc:MovieClip=new MovieClip();
trace(mc is DisplayObject);//出力:true
trace(mc is EventDispatcher);//出力:true
trace(mc is Number);//出力:false
まったく新しいAS3の世界!
694a.jpg
Adobe Flash CS4
詳細!ActionScript3.0入門ノート[完全改訂版](CD-ROM付)

楽しいActionScript。
新たなる1歩へと踏み出しましょう。
■内容は?→ 目次を見る
■評判は?→ 書評を読む
この本を書いたわけ

タグ

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。

あわせて読みたいブログパーツ