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

パスワード:


パスワード紛失

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

スレッド表示 | 新しいものから 前のトピック | 次のトピック | 下へ
投稿者 スレッド
TJFORD
Åê¹ÆNo.35318
投稿日時: 2007-9-29 14:20
半人前
居住地: Tokyo
投稿: 42
使用環境:
:Flash CS3
外部画像を読み込んだら順次フェードインするには
はじめまして。

現在件名の通り外部の画像を複数枚読み込み、読み込んだものからフェードインさせようと考えています。

詳細はまず空のムーピークリップを横並びに作り(a1,a2,a3...)その中に横幅100pxの画像配置します。それらの読み込みが完了したらムービークリップをy軸-200pxに配置し徐々にy軸0pxに近づくようにしたいと考えています。

読み込まれたものからフェードインする、少しズレてフェードインしてくるものをイメージしているのですが検討違いなのでしょうか?

現在はまったくフェードインして来ずにy軸-200pxのことろで静止しています。配列「jj」というものを作成し、使っているのですが、onEnterFrameの部分でjj[i]と書かずにjj[1]と入力すれば1枚目の画像はフェードインしてきます。

何かヒントなどご教授願えますでしょうか。
よろしくお願いいたします。

var jj:Array = new Array ();
var mcl:MovieClipLoader = new MovieClipLoader ();
var lo:Object = new Object ();
var target:Number = 0;
var speed:Number = 3;
lo.onLoadInit = function () {
for (var i = 1; i < 20; i++) {
jj[i] = _root["a" + i];
_root["a" + i]._y = -200;
trace (_root["a" + i]._y);
fadeIn ();
}
};
function fadeIn () {
onEnterFrame = function () {
jj[i]._y += (target - jj[i]._y) / speed;
};
}
mcl.addListener (lo);
for (var i = 1; i < 20; i++) {
_root.createEmptyMovieClip ("a" + i, i);
mcl.loadClip ("img/" + i + ".jpg", _root["a" + i]);
_root["a" + i]._x = (i - 1) * 100;
}
ニノミヤ カズノリ
Åê¹ÆNo.35319
投稿日時: 2007-9-29 15:51
職人
居住地: 東京
投稿: 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: 外部画像を読み込んだら順次フェードインするには
var jj:Array = new Array ();
var mcl:MovieClipLoader = new MovieClipLoader ();
var lo:Object = new Object ();
var target:Number = 0;
var speed:Number = 3;
lo.onLoadInit = function () {
	for (var i = 1; i < 20; i++) {
		jj[i] = _root["a" + i];
		_root["a" + i]._y = -200;
		trace (_root["a" + i]._y);
		//fadeIn ();
		_root["a" + i].onEnterFrame = fadeIn;
	}
};
function fadeIn () {
	//onEnterFrame = function () {
	//	jj[i]._y += (target - jj[i]._y) / speed;
	//};
	this._y += (target - this._y) / speed;
}
mcl.addListener (lo);
for (var i = 1; i < 20; i++) {
	_root.createEmptyMovieClip ("a" + i, i);
	mcl.loadClip ("img/" + i + ".jpg", _root["a" + i]);
	_root["a" + i]._x = (i - 1) * 100;
}

この様にすれば動くのではないかと。
TJFORD
Åê¹ÆNo.35320
投稿日時: 2007-9-29 16:30
半人前
居住地: Tokyo
投稿: 42
使用環境:
:Flash CS3
Re: 外部画像を読み込んだら順次フェードインするには
早速のご返信ありがとうございます。

確かにカズノリさんのスクリプトで動きます。動くのですが、自分がなぜこの違いで動くのか理解できない状態です。私のスクリプトの問題点は変数のスコープでしょうか。

あと少しいじっていたのですが、そもそもonLoadInitは画像が読み込まれるたび(a1に画像1.jpg、a2に画像2.jpg…)に動くのでしょうか。そうするとそもそも私のスクリプトがおかしいような気がしてきました。a1に画像が読み込まれた時にonLoadInit内のiの値が2以降の時の動作は必要ないわけで。

素人の質問で申し訳ありません。

ちなみに目標とするイメージは下記のサイトのように読み込まれたものをフェードインさせる感じなのですが。
http://www.macacolandia.com.br/v2/index.php
ニノミヤ カズノリ
Åê¹ÆNo.35321
投稿日時: 2007-9-29 17:41
職人
居住地: 東京
投稿: 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: 外部画像を読み込んだら順次フェードインするには
変数iのスコープの問題と、イベントハンドラonEnterFrameの設定の問題ですね。

onLoadInit内のfor構文にて宣言した変数iは有効範囲外の為、fadeIn関数内で使用することはできません。

(しかし、fadeIn関数にてtrace(i)を行うと20と言う値が返ってきます。
これはソース下段で下記のコードを実行した為です。
for (var i = 1; i < 20; i++) {
    _root.createEmptyMovieClip ("a" + i, i);
    mcl.loadClip ("img/" + i + ".jpg", _root["a" + i]);
    _root["a" + i]._x = (i - 1) * 100;
}
for構文を抜けた時、変数iは20が代入されており、またfadeIn関数もこの変数iの有効範囲内の為、20と言う結果が返ってくる訳です。)

また、fadeIn関数内で設定しているonEnterFrameは_rootのイベントハンドラです。
画像が読み込まれる度に_rootのonEnterFrameを設定するのでは、TJFORDさんの期待通りの動きは出来ないでしょう。

引用:
あと少しいじっていたのですが、そもそもonLoadInitは画像が読み込まれるたび(a1に画像1.jpg、a2に画像2.jpg…)に動くのでしょうか。そうするとそもそも私のスクリプトがおかしいような気がしてきました。a1に画像が読み込まれた時にonLoadInit内のiの値が2以降の時の動作は必要ないわけで。

その通りです。
画像が読み込まれる度、不必要な動作を行います。
野中文雄
Åê¹ÆNo.35323
投稿日時: 2007-9-29 23:04
ちょんまげら
居住地: 東京
投稿: 4531
使用環境:
CS5.5 .6.8 Vista Home Premium (SP1)
Re: 外部画像を読み込んだら順次フェードインするには
変数iがどこに設定されるか、その値がいつ参照されるかに注目する必要があります。「forループでMovieClipに設定したイベントハンドラメソッドから変数を参照する」をお読みください。
引用:
TJFORDさんは書きました:
確かにカズノリさんのスクリプトで動きます。動くのですが、自分がなぜこの違いで動くのか理解できない状態です。私のスクリプトの問題点は変数のスコープでしょうか。


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

TJFORD
Åê¹ÆNo.35332
投稿日時: 2007-9-30 17:37
半人前
居住地: Tokyo
投稿: 42
使用環境:
:Flash CS3
Re: 外部画像を読み込んだら順次フェードインするには
野中さんご返信ありがとうございます。

ご紹介いただきましたページを読ませていただきました。
その中で新たな疑問が出てしまいました。

下記ページにて、
http://www.fumiononaka.com/TechNotes/Flash/FN0303004.html#DefaultReference
--------------------------------------------------------------------------------

ターゲットパスがないと、「デフォルト参照」[*1]としてスクリプトを記述したタイムラインが参照されるということです。

// MovieClip: アニメーション用
// フレームアクション
this.stop();
whereAmI = "In this MovieClip "; // テスト用変数設定
this.my_btn.onPress = function() {
trace([this, _parent]); // テスト用1
trace(whereAmI); // テスト用2
_parent.play();
};

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

とのことですが、上記スクリプトを以下のように書き換えても
trace(whereAmI);で値を返してきます。なぜでしょうか?
何か根本的なことを理解できていないのでしょうか?
予想ではデフォルト参照はスクリプトを記述したタイムラインを参照するがそこには何も定義していないのでundefinedと出るかと思っていたのですが。

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

// MovieClip: アニメーション用
// フレームアクション
this.stop();
this.my_btn.onPress = function() {
whereAmI = "In this MovieClip "; // テスト用変数設定
trace([this, _parent]); // テスト用1
trace(whereAmI); // テスト用2
_parent.play();
};

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

※こちらの転載はルール違反でしょうか。その場合はすぐに削除させていただきます。

野中文雄
Åê¹ÆNo.35333
投稿日時: 2007-9-30 18:06
ちょんまげら
居住地: 東京
投稿: 4531
使用環境:
CS5.5 .6.8 Vista Home Premium (SP1)
Re: 外部画像を読み込んだら順次フェードインするには
テスト用変数whereAmIを設定するステートメントにターゲットが指定されていませんので、変数はスクリプトを記述したタイムラインに設定されるからです。
引用:
TJFORDさんは書きました:
予想ではデフォルト参照はスクリプトを記述したタイムラインを参照するがそこには何も定義していないのでundefinedと出るかと思っていたのですが。
// MovieClip: アニメーション用
// フレームアクション
this.stop();
this.my_btn.onPress = function() {
	whereAmI = "In this MovieClip ";   // テスト用変数設定
	this.whereAmI = "In the Button instance";
	trace([this, _parent]);   // テスト用1
	// trace(whereAmI);   // テスト用2
	trace([whereAmI, this.whereAmI]);  // テスト用3
	_parent.play();
};

このフォーラムの基本ルールとしては、違反するおそれがあり、注意する必要があるでしょう。ただ、数行のテスト用スクリプトで、とくにオリジナリティを感じさせるものでもありません。また、私のサイトのスクリプトについては、出典を明示するかぎりにおいて、基本的にはフォーラム等への引用を許諾します。
引用:
※こちらの転載はルール違反でしょうか。その場合はすぐに削除させていただきます。


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

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

ありがとうございます。根本的なミスということですね。
今回のアドバイスを元にスクリプトを以下のように変えてみました。
function内で「var」をつけた際にはローカル変数になると思うのですが、
trace(whereAmI);が値(In this MovieClip )を返すのはなぜなのでしょうか?

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

// MovieClip: アニメーション用
// フレームアクション
this.stop();
this.my_btn.onPress = function() {
var whereAmI = "In this MovieClip "; // テスト用変数設定
this.whereAmI = "In the Button instance";
trace(whereAmI); // テスト用2
trace(this.whereAmI); // テスト用3
_parent.play();
};

------------------------------------------------------------------------------
野中文雄
Åê¹ÆNo.35335
投稿日時: 2007-9-30 18:57
ちょんまげら
居住地: 東京
投稿: 4531
使用環境:
CS5.5 .6.8 Vista Home Premium (SP1)
Re: 外部画像を読み込んだら順次フェードインするには
参照がない場合、ローカル変数がタイムライン変数より先に参照されるためです。
// フレームアクション
_global.whereAmI = "In the global scope";
function xTest() {
	trace(whereAmI);
	whereAmI = "In the timeline";
	trace([whereAmI, _global.whereAmI]);
	var whereAmI = "In the local scope";
	trace([whereAmI, this.whereAmI, _global.whereAmI]);
}
xTest();

参考:「withステートメント
引用:
TJFORDさんは書きました:
function内で「var」をつけた際にはローカル変数になると思うのですが、
trace(whereAmI);が値(In this MovieClip )を返すのはなぜなのでしょうか?


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

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

度々で恐縮です。

以下のようなスクリプトの場合、trace(whereAmI);はデフォルト参照であるタイムラインの変数の値「time line」を出力すると予想したのですが、結果は「local」になります。
今回は参照があるのでそちらの値を出力すると思ったのですが。

何が間違っているのかが分からず困惑しております

------------------------------------------------------------------------------
// MovieClip: アニメーション用
// フレームアクション
whereAmI = "time line";
this.my_btn.onPress = function() {
var whereAmI = "local";
trace(whereAmI);
};
------------------------------------------------------------------------------
(1) 2 »
スレッド表示 | 新しいものから 前のトピック | 次のトピック | トップ

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