AS2.0でドキュメントにクラスをリンケージする方法を記載します。
これによりAS2.0でもAS3.0のドキュメントクラスのような扱い方ができます。

リンケージについて

AS2.0では、ドキュメントをAS3.0のようなクラスとして、例えばコンストラクタなどを使用することができません。
これは開発環境として FlashDevelop を使用する場合、とても残念な気持ちになります。
( タイムラインに #include "xxx.as" などと書くハメになる )

これを何とかAS3.0のように扱う方法を記載します。
( 副産物として、ソースファイルをフォルダで階層分けする方法もわかります )

AS3.0でのドキュメントクラスリンケージはMovieClipへのクラスリンケージ を参照してください。
AS3.0の場合はMovieClipへのリンケージとなんら変わりありません。

但し、この方法で生成したドキュメントクラスにonLoadイベントは発生しませんので注意!
(リンケージ前にonLoadは発生している)

実行環境

ActionScript2.0 / Adobe Flash CS5 (CS4, CS3 でも同じ)

 

サンプルプロジェクト

ここで使用するプロジェクトは以下からダウンロードできます。
サンプルプロジェクトのダウンロード

解凍すると以下の構成になっています。

    ./sample
       + src
       |  + lib
       |  |  + Message.as  ----> テストクラス
       |  + Main.as        ----> ドキュメントにリンクするクラス
       + sample.fla        ----> プロジェクトファイル

以降、このサンプルを元に記載します。

 

リンケージ方法

ルートタイムラインに以下スクリプトを記載します。ここでは Mainクラス をリンケージしています。

1.
2.
3.
4.
5.
6.
7.
8.
// sample.fla [root timeline]
‌ 
import src.Main
‌ 
// ドキュメントのprototypeを、Mainクラスのものに書き換える
this.__proto__ = Function(Main).prototype;
Function(Main).apply(thisnull);
‌ 

 

ドキュメントリンケージクラス(Main)の内容

1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
// === Main.as [./src/Main.as]
import  src.lib.Message;
‌ 
class src.Main{
‌ 
    public function Main() 
    {
        var myMsg : Message = new Message(100);
    }
}
このコードは CodePublisher で生成しています

 

Mainクラスから参照されたMessageクラス

1.
2.
3.
4.
5.
6.
7.
8.
// === Message.as [./src/lib/Message.as]
class src.lib.Message
{   
    public function Message( avValue:Number ) 
    {
        trace("create message " + avValue.toString() );
    }
}
このコードは CodePublisher で生成しています

コメント

  • コメントはまだありません。

コメントを投稿する

コメントを投稿する場合は以下に注意してください。

・記事に関係する内容であること
・特別な理由がない限り「全体公開」であること

これさえ守っていただければどんな内容でも投稿可能です。
皆様の質問やコメントは他の方の問題解決に繋がりますのでご協力ください。

コメント投稿フォーム
名前
メール
URL
コメント
閲覧制限

コメントを投稿するには、以下の問題に答えてください。
問題:「このサイト名をカタカナ六文字にして入力してください」