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

パスワード:


パスワード紛失

新規登録
メインメニュー
メイン
   ActionScript 3.0 特設会議室
     swfの単体実行判定(AS2での「this != _root」)
投稿するにはまず登録を

スレッド表示 | 新しいものから 前のトピック | 次のトピック | 下へ
投稿者 スレッド
phamin
Åê¹ÆNo.34502
投稿日時: 2007-8-1 14:25
新米
居住地:
投稿: 18
使用環境:
WinXP
Flash8
swfの単体実行判定(AS2での「this != _root」)
AS2使用時に、メインのswf(A)に読み込まれるswf(B)に、

if (this != _root) {処理}

…と書いておき、BがAに読み込まれて実行された場合と、B単体で実行された場合とで、処理を分けるということをしておりました。

これをAS3でやろうとした場合、どのような式になるのでしょうか

(こちらで、
if (this != Object(root)) {}
if (stage.root != Object(root)) {}
…など試してみたのですが、うまくいきませんでした)
野中文雄
Åê¹ÆNo.34506
投稿日時: 2007-8-1 15:36
ちょんまげら
居住地: 東京
投稿: 4531
使用環境:
CS5.5 .6.8 Vista Home Premium (SP1)
Re: swfの単体実行判定(AS2での「this != _root」)
あれこれ論理比較をしてみる前に、まずそれぞれのrootなどのインスタンスが何を参照しているのかを確かめましょう。
// swf: 外部からロードされるswf
// タイムライン: メイン
// フレームアクション
trace(xTest());
function xTest():String {
	trace(root);
	trace(root.parent);
	trace(stage);
	var status_str:String = "";
	var myParent:DisplayObject = root.parent;
	if (myParent is Loader) {
		status_str += "loaded";
		if (stage != null) {
			status_str += " and displayed";
		}
	} else if (myParent === stage) {
		status_str += "standalone";
	}
	return status_str;
}

引用:
phaminさんは書きました:
AS2使用時に、メインのswf(A)に読み込まれるswf(B)に、

if (this != _root) {処理}

…と書いておき、BがAに読み込まれて実行された場合と、B単体で実行された場合とで、処理を分けるということをしておりました。

これをAS3でやろうとした場合、どのような式になるのでしょうか


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

phamin
Åê¹ÆNo.34507
投稿日時: 2007-8-1 17:49
新米
居住地:
投稿: 18
使用環境:
WinXP
Flash8
Re: swfの単体実行判定(AS2での「this != _root」)
スクリプトを、読み込まれるswf(B)のフレームにコピーし、実行した結果は、以下になりました。

■読み込まれるswf単体で実行した場合
root : [object MainTimeline]
root.parent : [object Stage]
stage : [object Stage]
status_str:standalone

■メインのswfに読み込んで実行した場合
root : [object MainTimeline]
root.parent : [object Loader]
stage : null
status_str:loaded

「root.parent」の型が、「Loader」か、そうでないかで、
読み込まれている「loaded」か、単体実行「standalone」か分けることができるのですね。

if(this != _root){処理}については、ひとまず
if(root.parent is Loader){処理}にて代用してみます。

「stage」がnullかどうか比較することで、「displayed」かそうでないか判定している部分(↓)と、
---------------------------------------------------------
if (stage != null) {
status_str += " and displayed";
}
---------------------------------------------------------
厳密な等価演算子で比較している部分(厳密な等価演算子を使っている理由)(↓)については、
---------------------------------------------------------
if (myParent === stage)
---------------------------------------------------------
まだ、私の理解が追いついておりません。
今後の課題です。

お教えいただきありがとうございます。
スレッド表示 | 新しいものから 前のトピック | 次のトピック | トップ

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