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

パスワード:


パスワード紛失

新規登録
メインメニュー
メイン
   ActionScript 3.0 特設会議室
     AS3 だと MovieClip を for..in でのプロパティ列挙できない!?
投稿するにはまず登録を

スレッド表示 | 新しいものから 前のトピック | 次のトピック | 下へ
投稿者 スレッド
ながながい
Åê¹ÆNo.35953
投稿日時: 2007-11-4 17:53
半人前
居住地: 京都
投稿: 30
使用環境:
WindowsXP SP2,
Flash CS3, Flash8
AS3 だと MovieClip を for..in でのプロパティ列挙できない!?
AS でデバッグ用などで MovieClip の変数・プロパティを列挙させたいときに for-in をよく使うのですが、
これまで AS2 で機能していた文が AS3 で効かないので、質問させてください。

次のように、root の MovieClip に動的にプロパティを設定し、
その直後に for..in で列挙しようとしているだけですが、
結果が AS2 と AS3 とで異なります。AS3では列挙できないみたいですね。

// ルートの1フレーム目に記述
var a:Number = 100;
var b:String = "abcde"
var c:Array = ["1", "22", "333"];

for(var i:String in this){
	trace(i+": " + this[i]);
}
// 出力結果
/*
・AS2の場合
	c: 1,22,333
	b: abcde
	a: 100
	$version: WIN 9,0,45,0

・AS3の場合
	何も表示されない・・・?
*/


そこで、for..in をヘルプで調べてみたところ、
引用:
オブジェクトの動的プロパティまたは配列のエレメントに対して反復処理を行い、各プロパティまたはエレメントに対して statement を実行します。オブジェクトのプロパティは特定の順序で保持されないため、プロパティは外見上ランダムな順序で表示されます。for..in ステートメントでは、クラスに定義された変数やメソッドなどの固定プロパティは列挙されません。固定プロパティのリストを取得するには、flash.utils パッケージにある describeType() 関数を使用します。

とありました。


AS3 では、ライブラリ内の MovieClip シンボルはパブリッシュ時にすべて flash.display.MovieClip を継承したカスタムクラスになると聞いていますが、今回もフレームアクションの記述がインスタンスプロパティとして認識され、その結果、for..in で列挙できないと考えればいいのでしょうか?


なお、describeType() を使用してXMLを表示させると、
引用:
<variable name="c" type="Array"/>
<variable name="a" type="Number"/>
<variable name="i" type="String"/>

という記述があることがわかりました。

MovieClip のプロパティを好きなタイミングで列挙したい場合、
 (1) 上記XMLからプロパティ名を取得
 (2) それをもとにたどる
というプロセスを踏む必要があるということでしょうか?


どなたか、この付近の仕様や列挙方法に関してお答えくださいませんでしょうか?
よろしくお願いします。
ニノミヤ カズノリ
Åê¹ÆNo.35958
投稿日時: 2007-11-4 21:26
職人
居住地: 東京
投稿: 430
使用環境:
CS4
.4.11, .5.7
XP Pro(sp3)
Flash Player 10,0,22,87,
AIR 1.5.1,
IE 5.5 & 6 & 7 & 8,
Firefox 2.0.0.20 & 3.0.11 & 3.5,
Opera 9.64,
Safari 4,
Google Chrome 2.0.172.31,
Netscape 7.1
Re: AS3 だと MovieClip を for..in でのプロパティ列挙できない!?
こちらが参考になると思います。

var a:Number = 100;
var b:String = "abcde"
var c:Array = ["1", "22", "333"];

ではなく、
this.a = 100;
this.b = "abcde";
this.c = ["1", "22", "333"];

としなければ表示されないようですね。
ながながい
Åê¹ÆNo.35967
投稿日時: 2007-11-5 4:59
半人前
居住地: 京都
投稿: 30
使用環境:
WindowsXP SP2,
Flash CS3, Flash8
Re: AS3 だと MovieClip を for..in でのプロパティ列挙できない!?
>ニノミヤさん

情報ありがとうございます!
リンク先にばっちりほしい情報がありました。

たとえダイナミックなクラスだとしても、クラスで定義したプロパティ・メソッドは列挙できないんですね。
納得いきませんが、そういう仕様なんですね・・・。

describeType() と併用したデバッグ用のクラスを自作して活用したいと思います。

でわでわ。
oryaaaaa
Åê¹ÆNo.36108
投稿日時: 2007-11-11 13:15
新米
居住地:
投稿: 7
使用環境:
MacOSX Tiger, FLASH CS3
Re: AS3 だと MovieClip を for..in でのプロパティ列挙できない!?
ActionScript3の高速化根拠に、変数をルックアップでなく
アドレス参照で処理している点から難しいのだと思います。
元に(AS2へ)戻すような処理を作ったら、高速化根拠が
崩れて10倍遅くなってしまうかも、しれませんね
スレッド表示 | 新しいものから 前のトピック | 次のトピック | トップ

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