トップへ戻るニュースフォーラムFLASH-ML 過去ログBak@Flaダウンロードよくある質問と答
ログイン
ユーザ名:

パスワード:


パスワード紛失

新規登録
メインメニュー
メイン
   コーダーズルーム【スクリプト系】
     ステージ上のムービークリップをMovieClipクラスのサブクラスに変換(?)する
投稿するにはまず登録を

フラット表示 前のトピック | 次のトピック
投稿者 スレッド
gaienboy
Åê¹ÆNo.35282
投稿日時: 2007-9-27 17:17
職人
居住地: 東京・神宮前
投稿: 717
使用環境:
ステージ上のムービークリップをMovieClipクラスのサブクラスに変換(?)する
こんにちは、gaienboyです。

ステージ上に配置してあるムービークリップを、カスタムクラス(MovieClipクラスの
サブクラス)として扱う方法について躓いています。以下、ちょっと長文になります。

※追記:ActionScript2.0で開発しています

ヘルプ「ActionScript 2.0 の学習」の「継承>継承について」で、下記の記述がありました。
引用:
サブクラスは、"スーパークラス" のすべてのプロパティとメソッドを継承します。


そこで、TestClassというクラスと、その拡張であるSubTestClassというクラスを作って
検証し、SubTestClassからTestClassのインスタンスメソッドが使えることを確認しました。

TestClass.asの記述
//クラス定義
class TestClass{
	// コンストラクタ
	function TestClass(){
	}
	// インスタンスメソッド
	function TestFunc():Void{
		trace("TestFunc実行");
	};
}

SubTestClass.asの記述
//クラス定義
class SubTestClass extends TestClass{
	// コンストラクタ
	function SubTestClass(){
	}
	// インスタンスメソッド
	function SubTestFunc():Void{
		trace("SubTestFunc実行");
	};
}

Flaファイルの記述
var myTest:SubTestClass = new SubTestClass();
myTest.TestFunc();	//"TestFunc実行"を出力=スーパークラスのメソッドを実行
myTest.SubTestFunc();	//"SubTestFunc実行"を出力

これで、サブクラスからスーパークラスのメソッドが呼び出せていることを確認しました。

次に、MovieClipクラスのサブクラスを作りました。

SubMovieClip.asの記述
//クラス定義
class SubMovieClip extends MovieClip{
	// コンストラクタ
	function SubMovieClip(){
	}
	// インスタンスメソッド
	function SubMovieClipFunc():Void{
		trace("SubMovieClipFunc実行");
	};
}


そして、ステージ上に配置してあるムービークリップ「bar_mc」をSubMovieClip
クラスに変換(?)して、SubMovieClipクラスのインスタンスメソッドと、
スーパークラスであるMovieClipクラスのプロパティを呼び出してみようと考えました。

トライ1:
bar_mcがステージ上のbar_mcを参照していないため(?)、
bar_mcの_xプロパティを取得できず失敗
bar_mc = new SubMovieClip();
bar_mc.SubMovieClipFunc();	//"SubMovieClipFunc実行"を出力
trace(bar_mc._x);	//undefined


トライ2:
コンストラクタに渡したbar_mcが宙ぶらりんになっているため(?)、
bar_mcの_xプロパティを取得できず失敗
var myBar:SubMovieClip = new SubMovieClip(bar_mc);
myBar.SubMovieClipFunc();	//"SubMovieClipFunc実行"を出力
trace(myBar._x);	//undefined


ライブラリにあるbar_mcシンボルのリンケージで「クラス」にSubMovieClipを
指定したら、SubMovieClipクラスのインスタンスメソッドとMovieClipクラスのプロパティ
の両方を扱うことができました。

トライ3:
bar_mc.SubMovieClipFunc();	//"SubMovieClipFunc実行"を出力
trace(bar_mc._x);	//"200"を出力


コンストラクタでSubMovieClipインスタンスを作る時に、元となる(?)
ムービークリップにSubMovieClipのインスタンスメソッドをコピーしたところ、
bar_mcからSubMovieClipFuncメソッドを呼び出せるようにはなりました。
ただし、myBarから、スーパークラスであるMovieClipクラスのプロパティに
アクセスすることはできません。

SubMovieClip.asの記述(変更後)
//クラス定義
class SubMovieClip extends MovieClip{
	var my_mc:MovieClip;	
	// コンストラクタ
	function SubMovieClip(mc:MovieClip){
		my_mc = mc;
		my_mc.SubMovieClipFunc = SubMovieClipFunc;
	}
	// インスタンスメソッド
	function SubMovieClipFunc():Void{
		trace("SubMovieClipFunc実行");
	};
}


トライ4:
var myBar:SubMovieClip = new SubMovieClip(bar_mc);
bar_mc.SubMovieClipFunc();	//"SubMovieClipFunc実行"を出力
trace(bar_mc._x);	//"200"を出力
myBar.SubMovieClipFunc();	//"SubMovieClipFunc実行"を出力
trace(myBar._x);	//undefined


トライ3のように、「bar_mc」を指定して、MovieClipクラスのプロパティ・
メソッドも、SubMovieClipクラスのプロパティ・メソッドも両方使えるのが
現在の目標です。これを、「ライブラリのシンボルにクラスをリンケージする」
のではなく、「ステージ上のムービークリップに動的にクラスをリンケージする」
という方法がないものかと思って、悩んでいます。

ヘルプの「ActionScript 2.0 の学習」の「クラス」と「継承」、ならびに
野中先生のテクニカルノート「オブジェクト指向プログラミング」の項目は
目を通したつもりです。が、見落としや勘違いがある可能性も大です(汗)。

クラスの勉強を始めてまだ間もないので、基本的な考え方に問題があるのかも
しれないのですが、そのあたりも含め、識者の皆様のご意見・アドバイスを
いただけたらと思います。

長文、失礼しました


----------------
Tonpoo (a.k.a. gaienboy)
Tonpoo.com / TONPOOBLOG / twitter@tonpootwit

フラット表示 前のトピック | 次のトピック

題名 投稿者 日時
 » ステージ上のムービークリップをMovieClipクラスのサブクラスに変換(?)する gaienboy 2007-9-27 17:17
     Re: ステージ上のムービークリップをMovieClipクラスのサブクラスに変換(?)する nioia321 2007-9-27 21:09
       Re: ステージ上のムービークリップをMovieClipクラスのサブクラスに変換(?)する gaienboy 2007-9-28 0:45
     Re: ステージ上のムービークリップをMovieClipクラスのサブクラスに変換(?)する Fumio 2007-9-27 21:40
       Re: ステージ上のムービークリップをMovieClipクラスのサブクラスに変換(?)する gaienboy 2007-9-28 5:29

投稿するにはまず登録を
 
Copyright (C) 2003 FLASH-japan. All rights reserved.
Powered by Xoops