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

パスワード:


パスワード紛失

新規登録
メインメニュー
メイン
   迷える子羊の部屋【初心者専用】
     アクセス演算子とクラスオブジェクト生成について
投稿するにはまず登録を

スレッド表示 | 新しいものから 前のトピック | 次のトピック | 下へ
投稿者 スレッド
TOMIYASU
Åê¹ÆNo.45553
投稿日時: 2010-8-22 22:41
常連
居住地:
投稿: 93
使用環境:
Windows7Pro, CS5Pro
アクセス演算子とクラスオブジェクト生成について
複数の連番の付いたクラスのインスタンスを生成する必要があり
現在以下のようにしていますが、これをアクセス演算子で更に下のようにすると
「Error #1007: コンストラクタ以外にインスタンス化が試行されました。」というエラーになります。
各クラスのコンストラクタには問題ありませんが、記述に問題があるようですが・・・
クラスのコンストラクタの呼び出し時のアクセス演算子の使いかただと思います。
その点について教えていただきたくお願いいたします。

[OK]---------------------------------
instances_array.push(new myClass1());
instances_array.push(new myClass2());
instances_array.push(new myClass3());

[NG]----------------------------------
for (var i:int = 1; i<=3; i++) {
instances_array.push(new ["myClass"+i]());
}

=>更にこのインスタンスの配列を別クラスに渡して
以下のような処理する場合、ローカル変数の宣言のvar my_mc:MovieClip;で
参照クラスは個別のmyClass1?myClass3を指定できないので(上記と同様にエラー)
とりあえずMovieClipでごまかしている感じなのですが
動作に問題がなければ厳密なクラス名の参照にしなくてもいいものでしょうか?
個別のクラスの独自メソッドにも問題なくアクセスできます。
これら個別のクラスにとってMovieClipはスーパークラスです。



public function startProceed(instances_array:Array):void {
	var nInstances:uint = instances_array.length;

	var my_mc:MovieClip;

	for (var i:int = 0; i<nInstances; i++) {
		my_mc = instances_array[i];
		myStage_mc.addChild(my_mc);
		my_mc.startDance(i*20);
		addEventListener(StoppingEvent.FREEZE, my_mc.stopRN);
	}
}
野中文雄
Åê¹ÆNo.45554
投稿日時: 2010-8-22 23:22
ちょんまげら
居住地: 東京
投稿: 4531
使用環境:
CS5.5 .6.8 Vista Home Premium (SP1)
Re: アクセス演算子とクラスオブジェクト生成について
問題は単純化して考えましょう。
var i:uint = 0;
var test = ["myClass"+i];
trace(test is Array);
trace(test.length);
trace(test[0]);
trace(typeof test[0]);

参考:「ドット演算子と配列アクセス演算子」「クラスを文字列で参照したい

データ型をオブジェクトのスーバークラスで指定することは可能です。スーバークラスのプロパティとメソッド以外使わないのであれば問題ありません。
引用:
TOMIYASUさんは書きました:
複数の連番の付いたクラスのインスタンスを生成する必要があり
現在以下のようにしていますが、これをアクセス演算子で更に下のようにすると
「Error #1007: コンストラクタ以外にインスタンス化が試行されました。」というエラーになります。
各クラスのコンストラクタには問題ありませんが、記述に問題があるようですが・・・
...[中略]...
[NG]----------------------------------
for (var i:int = 1; i<=3; i++) {
	instances_array.push(new ["myClass"+i]());
}

=>更にこのインスタンスの配列を別クラスに渡して
以下のような処理する場合、ローカル変数の宣言のvar my_mc:MovieClip;で
参照クラスは個別のmyClass1?myClass3を指定できないので(上記と同様にエラー)
とりあえずMovieClipでごまかしている感じなのですが
動作に問題がなければ厳密なクラス名の参照にしなくてもいいものでしょうか?
個別のクラスの独自メソッドにも問題なくアクセスできます。
これら個別のクラスにとってMovieClipはスーパークラスです。


----------------
 

TOMIYASU
Åê¹ÆNo.45556
投稿日時: 2010-8-23 0:54
常連
居住地:
投稿: 93
使用環境:
Windows7Pro, CS5Pro
Re: アクセス演算子とクラスオブジェクト生成について
野中様
さっそくありがとうございます。
["myClass"+i]が配列で、要素もただのStringだし、
New()に使えないというエラーの意味だったのですね。

「クラスを文字列で参照したい」よくわかりました。
クラスを示す文字列を作り、それをもとにクラスを示す変数を作り
それからコンストラクタを呼び出すということですね。
データ型指定の件もわかりました。。


for (var i:int = 1; i<=3; i++) {
	var name_str:String = "classes.myClass"+i;
	var myClass:Class =Class(getDefinitionByName(name_str));
	var myInstance:MovieClip = new myClass();
	instances_array.push(myInstance);
}


ここの過去ログとあわせてHPの方も参考にさせていただきます。
(有名サイトですね、質問前に確認ですね)
ありがとうございました。
スレッド表示 | 新しいものから 前のトピック | 次のトピック | トップ

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