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

パスワード:


パスワード紛失

新規登録
メインメニュー
メイン
   迷える子羊の部屋【初心者専用】
     外部画像を読み込んだら順次フェードインするには
投稿するにはまず登録を

スレッド表示 | 新しいものから 前のトピック | 次のトピック | 下へ
投稿者 スレッド
ひろゆき
Åê¹ÆNo.35339
投稿日時: 2007-10-1 1:48
ちょんまげら
居住地: 東京砂漠
投稿: 4403
使用環境:
10.8.5

Flash Professional CS4/CS6/CC

Safari 6.1
Re: 外部画像を読み込んだら順次フェードインするには
すでに、野中さんが書かれていると思いますが。
引用:
ローカル変数がタイムライン変数より先に参照されるためです。

var whereAmI:String = "time line";
this.my_btn.onPress = function():Void {
	//var whereAmI:String = "local";
	trace(whereAmI);
};

スコープチェーンって何?


----------------
質問する際は、回答者に具体的な情報を与えてください。

野中文雄
Åê¹ÆNo.35340
投稿日時: 2007-10-1 1:53
ちょんまげら
居住地: 東京
投稿: 4531
使用環境:
CS5.5 .6.8 Vista Home Premium (SP1)
Re: 外部画像を読み込んだら順次フェードインするには
前の回答に引用したテスト用スクリプトは、試してご覧になりましたか?「参照がない場合、ローカル変数がタイムライン変数より先に参照され」ます。

「参照がある」というのは、変数の識別子の前にthisなりインスタンスなりをターゲットとして指定することを意味します。trace()関数の引数に指定されている変数には、つまり参照がありません。
引用:
TJFORDさんは書きました:
以下のようなスクリプトの場合、trace(whereAmI);はデフォルト参照であるタイムラインの変数の値「time line」を出力すると予想したのですが、結果は「local」になります。
今回は参照があるないのでそちらの値を出力するしないと思ったのですが。


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

TJFORD
Åê¹ÆNo.35341
投稿日時: 2007-10-1 2:05
半人前
居住地: Tokyo
投稿: 42
使用環境:
:Flash CS3
Re: 外部画像を読み込んだら順次フェードインするには
ひろゆきさん 野中さん

ご返信ありがとうございます。
日本語を誤解していました。

「参照がない場合」というのをタイムライン変数「whereAmI」がないということだと思ってしまっていました。

以下のように記述すると「time line」を返すのですがなぜですか
バカな質問ばかりでたいへん申し訳ございません

????????????????????????????
this.my_btn.onPress = function():Void {
var whereAmI:String = "local";
whereAmI = "time line";
trace(whereAmI);
};
????????????????????????????



野中文雄
Åê¹ÆNo.35342
投稿日時: 2007-10-1 2:16
ちょんまげら
居住地: 東京
投稿: 4531
使用環境:
CS5.5 .6.8 Vista Home Premium (SP1)
Re: 外部画像を読み込んだら順次フェードインするには
「参照」の原則は、取得時だけでなく、設定時にも当てはまります。変数whereAmIに「参照がない」のでローカル変数を対象として、"time line"という値が設定されるからです。
引用:
TJFORDさんは書きました:
以下のように記述すると「time line」を返すのですがなぜですか
...[中略]...
this.my_btn.onPress = function():Void  {
	var whereAmI:String = "local";
	whereAmI = "time line";
	// trace(whereAmI);
	trace([whereAmI, this.whereAmI]);
};


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

ひろゆき
Åê¹ÆNo.35343
投稿日時: 2007-10-1 5:10
ちょんまげら
居住地: 東京砂漠
投稿: 4403
使用環境:
10.8.5

Flash Professional CS4/CS6/CC

Safari 6.1
Re: 外部画像を読み込んだら順次フェードインするには
this.my_btn.onPress = function():Void {
	var whereAmI:String = "local";
	trace(whereAmI);
	whereAmI:String = "time line";
	trace(whereAmI);
};

ひょっとして、
var がついているものがローカル変数で、
var がついていないものがタイムライン変数だと、
勘違いされていませんか?

ヘルプより
引用:
var ステートメント

var variableName [= value1][...,variableNameN[=valueN]]

ローカル変数を宣言する場合に使用します。関数内で変数を宣言した場合、その変数はローカルです。変数はその関数用に定義され、関数呼び出しの終了時にスコープから外れます。具体的には、var を使用して定義された変数は、その変数が含まれるコードブロックでのみ有効です。コードブロックは中カッコ ({}) で囲まれます。


----------------
質問する際は、回答者に具体的な情報を与えてください。

TJFORD
Åê¹ÆNo.35344
投稿日時: 2007-10-1 9:32
半人前
居住地: Tokyo
投稿: 42
使用環境:
:Flash CS3
Re: 外部画像を読み込んだら順次フェードインするには
野中さん ひろゆきさん

ご返信ありがとうございました。
まずひろゆきさんの言われるとおり勘違いしておりました。
引用:
ひょっとして、
var がついているものがローカル変数で、
var がついていないものがタイムライン変数だと、
勘違いされていませんか?

this.my_btn.onPress = function():Void {
var whereAmI:String = "local";
trace(whereAmI);
whereAmI:String = "time line";←ここをタイムラインの変数を宣言していると勘違いしていました。実際はローカル変数「whereAmI」を上書きしている。
trace(whereAmI);
};

現在の自分の頭の中ではこのようになっています。

// メインのタイムラインのフレームアクション
_global.whereAmI = "In the global scope";
function xTest() {
trace(whereAmI);
whereAmI = "In the timeline";
trace(whereAmI);←デフォルト参照はメインのタイムラインのため「In the timeline」を返す。
var whereAmI = "In the local scope";
trace(whereAmI);←参照なし(デフォルト参照)の場合はローカル変数を先に参照するため「In the local scope」を返す。
trace(this.whereAmI);←「this」はメインのタイムラインを指すので「In the timeline」を返す。(?ここはよくわかりませんが「trace(this);」をfunction内で行ったとき「_level0」が出力されたので_level0、つまりメインのタイムラインの変数である「In the timeline」が返されると解釈しています。)
}
xTest();


いかがでしょうか?
野中文雄
Åê¹ÆNo.35346
投稿日時: 2007-10-1 10:11
ちょんまげら
居住地: 東京
投稿: 4531
使用環境:
CS5.5 .6.8 Vista Home Premium (SP1)
Re: 外部画像を読み込んだら順次フェードインするには
基本的に、それで結構だと思います。2点だけ、補足します。
引用:
TJFORDさんは書きました:
whereAmI:String = "time line";←ここをタイムラインの変数を宣言していると勘違いしていました。実際はローカル変数「whereAmI」を上書きしている。

関数本体内のthisは、functionが設定(メモリ)されているタイムライン(オブジェクト)を参照します。

以下のfunctionはメインタイムラインに定義されているので、関数本体内のthisはメインタイムラインを参照します。
引用:
// メインのタイムラインのフレームアクション
// ...[中略]...
function xTest() {
// ...[中略]...
trace(this.whereAmI);←「this」はメインのタイムラインを指すので「In the timeline」を返す。(?ここはよくわかりませんが「trace(this);」をfunction内で行ったとき「_level0」が出力されたので_level0、つまりメインのタイムラインの変数である「In the timeline」が返されると解釈しています。)
}

以下のfunctionButton.onPressイベントハンドラメソッド(のコールバック関数)としてButtonインスタンスに設定されているので、関数本体内のthisはmy_btnを参照します。
this.my_btn.onPress = function() {


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

« 1 (2)
スレッド表示 | 新しいものから 前のトピック | 次のトピック | トップ

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