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

パスワード:


パスワード紛失

新規登録
メインメニュー
メイン
   コーダーズルーム【スクリプト系】
     関数から戻るタイミング
投稿するにはまず登録を

スレッド表示 | 新しいものから 前のトピック | 次のトピック | 下へ
投稿者 スレッド
みっく
Åê¹ÆNo.22860
投稿日時: 2006-1-16 15:49
常連
居住地: 尾張
投稿: 116
使用環境:
PC:iBook G4 (1.42GHz)
OS: (10.4.10)
FL: &
関数から戻るタイミング
いつもお世話になります
いつも質問ばかりで申し訳ないです

ちょっと疑問に思ったんですが
例えば定義した関数内で時間のかかる処理をした場合
処理が終わってから関数を抜けるのか
それとも処理を開始し終わったら抜けるのか
と言う事なんですが

回答よろしくお願いしますm(__)m
野中文雄
Åê¹ÆNo.22861
投稿日時: 2006-1-16 16:30
ちょんまげら
居住地: 東京
投稿: 4531
使用環境:
CS5.5 .6.8 Vista Home Premium (SP1)
Re: 関数から戻るタイミング
意味というかポイントが、よくわかりません。(^^;
引用:
みっくさんは書きました:
例えば定義した関数内で時間のかかる処理をした場合
処理が終わってから関数を抜けるのか
それとも処理を開始し終わったら抜けるのか
と言う事なんですが

これで、答えになりますか?
function xTest() {
	trace("start");
	while (getTimer()<3000) {
	}
	trace("end");
}
trace("calling");
xTest();
trace("completing");


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

みっく
Åê¹ÆNo.22863
投稿日時: 2006-1-16 18:02
常連
居住地: 尾張
投稿: 116
使用環境:
PC:iBook G4 (1.42GHz)
OS: (10.4.10)
FL: &
Re: 関数から戻るタイミング
引用:

野中文雄さんは書きました:


function xTest() {
	trace("start");
	while (getTimer()<3000) {
	}
	trace("end");
}
trace("calling");
xTest();
trace("completing");


いつもありがとうございます
ご呈示頂いたサンプルの場合
関数内でループをしているので
ループ中は関数から戻らないと言うのはわかるのですが
例えば次のような場合はどうなるのでしょうか?
function putPhoto():Void
{

  var fileName:String = "photo.jpg";
  var newName:String = "photo";
  var depth:Number = 1;
  var newObj:MovieClip = _root.createEmptyMovieClip(newName, depth);
  newObj.loadMovie(fileName);
}

このコードの場合の読み込み完了のチェックの仕方がわからないのです
もし 処理が終わる前に関数から戻る場合
関数外で読み込み完了をチェックしなければいけないと思うのですがローカル変数はなくなってしまうと思うので
putPhoto();
newObj.onLoad = function(){
処理;
}

のような事は出来ないと思います

このような場合どのようにして読み込みの完了をチェックすれば良いのでしょうか?

よろしくお願いします
ひろゆき
Åê¹ÆNo.22864
投稿日時: 2006-1-16 18:24
ちょんまげら
居住地: 東京砂漠
投稿: 4403
使用環境:
10.8.5

Flash Professional CS4/CS6/CC

Safari 6.1
Re: 関数から戻るタイミング
引用:
このような場合どのようにして読み込みの完了をチェックすれば良いのでしょうか?

Flash8のヘルプには、
引用:
onLoad (MovieClip.onLoad ハンドラ)

onLoad = function() {}

ムービークリップのインスタンスが作成されてタイムラインに読み込まれると、呼び出されます。このイベントハンドラが呼び出されたときに実行される関数を定義する必要があります。関数はタイムラインに定義できます。また、MovieClip クラスを拡張するクラスファイル内、またはライブラリ内のシンボルにリンクされるクラスファイル内に定義できます。

このハンドラは、クラスに関連付けられたシンボルがライブラリに存在するムービークリップでのみ使用します。たとえば、MovieClip.loadMovie() を使用して SWF ファイルを動的にロードする場合など、特定のムービークリップがロードされたときにイベントハンドラを呼び出す場合は、このハンドラの代わりに、onClipEvent(load) または MovieClipLoader クラスを使用します。他のハンドラは、MovieClip.onLoad とは異なり、どのムービークリップがロードされたときにも呼び出されます。
とあります。
#onClipEvent(data)を使用した方がいいと思うんですが、onClipEvent(load)になっていますね。

FN0307007 - MovieClip.loadMovieで外部ファイルを読込む
createEmptyMovieClip onDataがよばれない
onDataイベントハンドらメソッドについて
loading movieについて
などが参考になるでしょうか。

#FlashPlayer7であれば、
#MovieClipLoader を用いるのがよろしいかと思いますが。
MovieClipLoaderクラスについて


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

野中文雄
Åê¹ÆNo.22865
投稿日時: 2006-1-16 18:46
ちょんまげら
居住地: 東京
投稿: 4531
使用環境:
CS5.5 .6.8 Vista Home Premium (SP1)
Re: 関数から戻るタイミング
外部ファイルの読込みは、サーバーを経由する処理でもありますので、MovieClip.loadMovie()メソッドの仕事はサーバーにデータのロードを要求するだけで完了していると見ればよいと思います。

もし、読込み完了まで待つとすれば、スクリプトの処理中は再生ヘッドが止まりますので、ロード待ちのアニメーションも表示できないことになります。
引用:
みっくさんは書きました:
例えば次のような場合はどうなるのでしょうか?
// ...[前略]...
  var newObj:MovieClip = _root.createEmptyMovieClip(newName, depth);
  newObj.loadMovie(fileName);
// ...[後略]...

このコードの場合の読み込み完了のチェックの仕方がわからないのです

MovieClip.onLoadは、ロード完了のイベントを扱うメソッドではありません。

ひろゆきさんも勧められているMovieClipLoaderクラスをお使いになれば、ロードを始めてから完了するまでの状況を監視して、各種イベントを受取ることができます。
引用:
もし 処理が終わる前に関数から戻る場合
関数外で読み込み完了をチェックしなければいけないと思うのですがローカル変数はなくなってしまうと思うので
putPhoto();
newObj.onLoad = function(){
処理;
}

のような事は出来ないと思います


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

みっく
Åê¹ÆNo.22866
投稿日時: 2006-1-16 19:01
常連
居住地: 尾張
投稿: 116
使用環境:
PC:iBook G4 (1.42GHz)
OS: (10.4.10)
FL: &
Re: 関数から戻るタイミング
ひろゆきさん、 野中さん
回答ありがとうございます

まだ ざっとしか読んでないのですが
読んだ限りでは 「MovieClipLoader」
を使った方が良さそうですね

ちょっと試してみます

取り急ぎ返事まで...
みっく
Åê¹ÆNo.23043
投稿日時: 2006-1-22 18:55
常連
居住地: 尾張
投稿: 116
使用環境:
PC:iBook G4 (1.42GHz)
OS: (10.4.10)
FL: &
Re: 関数から戻るタイミング
遅くなって申し訳有りません

「MovieClipLoader」を使ってうまくいきました
ありがとうございます

一応フィードバックと言う事で
簡略化したコードを載っけておきます

MovieClipLoaderサンプル ----------

//////////////////////////////
// 複数画像読み込みサンプル //
//////////////////////////////

/* 変数宣言 */
var loadObj:LoadVars = new LoadVars();

/* 読み込み完了時の処理 */
loadObj.onLoad = function(bSuccess:Boolean):Void  {
	if (bSuccess) {
		for (var i:Number = 0; i < 画像の枚数; i++) {
			var my_mcl:MovieClipLoader = new MovieClipLoader();
			var oListener:Object = new Object();
			oListener.onLoadInit = function(target_mc:MovieClip) {
				/* 画像読み込み完了後の処理 */
			}
			/* リスナー登録 */
			my_mcl.addListener(oListener);
			/* 画像読み込み */
			my_mcl.loadClip(ファイル名, ムービークリップ);
		}
	}
};

/* ファイル読み込み */
loadObj.load(ファイル名);

とりあえず
ちゃんと動いてますので
コード的にも問題無いと思います
ひろゆき
Åê¹ÆNo.23044
投稿日時: 2006-1-22 19:00
ちょんまげら
居住地: 東京砂漠
投稿: 4403
使用環境:
10.8.5

Flash Professional CS4/CS6/CC

Safari 6.1
Re: 関数から戻るタイミング
MovieClipLoader が何度も生成されるように思うので、
var my_mcl:MovieClipLoader = new MovieClipLoader();
var oListener:Object = new Object();
oListener.onLoadInit = function(target_mc:MovieClip) {
	/* 画像読み込み完了後の処理 */
}
my_mcl.addListener(oListener);

/* 読み込み完了時の処理 */
loadObj.onLoad = function(bSuccess:Boolean):Void  {
	if (bSuccess) {
		for (var i:Number = 0; i < 画像の枚数; i++) {
			my_mcl.loadClip(ファイル名, ムービークリップ);
		}
	}
};
とか
/* 読み込み完了時の処理 */
loadObj.onLoad = function(bSuccess:Boolean):Void  {
	if (bSuccess) {
		var my_mcl:MovieClipLoader = new MovieClipLoader();
		var oListener:Object = new Object();
		oListener.onLoadInit = function(target_mc:MovieClip) {
			/* 画像読み込み完了後の処理 */
		}
		my_mcl.addListener(oListener);
		for (var i:Number = 0; i < 画像の枚数; i++) {
			my_mcl.loadClip(ファイル名, ムービークリップ);
		}
	}
};
でも、いいように思います。

あと、できれば、画像は一度に読み込まないようにした方が無難かと。


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

みっく
Åê¹ÆNo.23047
投稿日時: 2006-1-22 19:18
常連
居住地: 尾張
投稿: 116
使用環境:
PC:iBook G4 (1.42GHz)
OS: (10.4.10)
FL: &
Re: 関数から戻るタイミング
フォローありがとうございます

なるほど 一度用意しておけば
何度も使い回せるんですね

引用:
あと、できれば、画像は一度に読み込まないようにした方が無難かと。

と言う事は
画像の読み込みが終わってから
次の画像を読み込んだ方が良いと言う事ですね
ひろゆき
Åê¹ÆNo.23048
投稿日時: 2006-1-22 19:22
ちょんまげら
居住地: 東京砂漠
投稿: 4403
使用環境:
10.8.5

Flash Professional CS4/CS6/CC

Safari 6.1
Re: 関数から戻るタイミング
引用:
なるほど 一度用意しておけば
何度も使い回せるんですね

入れ子構造、内側のfunctionから外側のfunctionを呼び出したい
などに書かれていますね。

引用:
画像の読み込みが終わってから
次の画像を読み込んだ方が良いと言う事ですね

MovieClip.loadMovide の場合だけかもしれません。
2つの画像をloadMovieして読み込み待ち

MovieClipLoader の場合、複数のファイルを同時に読み込むのはダメだ
という記事は見たことがないのですが、小心者なので、
そのようにしておいてもいいのではないかと。
MovieClipを外部ファイルごとduplicateできるの?

ただ、それをしなくても、問題が起きなければ、
さほど気にしなくてもいいかもしれません。
MovieClipLoader.loadClip()で複数のファイルをロードの意味
というスレッドもあるんですが。

曖昧な言い方で申し訳ないです。


例えば、file2.jpg は load_mc2 に、file5.jpg は load_mc5 に読み込むとして
var my_mcl:MovieClipLoader = new MovieClipLoader();
var oListener:Object = new Object();
oListener.onLoadInit = function(target_mc:MovieClip):Void {
	//1枚の画像が読み込み完了したときの処理
	//target_mc._visible = false;
	var nextNum:Number = this.imgNum+1;
	loadImageInOrder(nextNum);
}
my_mcl.addListener(oListener);

loadObj.onLoad = function(bSuccess:Boolean):Void  {
	if (bSuccess) {
		for (var i:Number = 0; i < 画像の枚数; i++) {
			//_root.createEmptyMovieClip("load_mc"+i, i+1);
		}
		loadImageInOrder(0);
	}
};

function loadImageInOrder(imgNum:Number):Void {
	if (imgNum < 画像の枚数) {
		var fileName:String = "file"+imgNum+".jpg";
		var load_mc:MovieClip = this["load_mc"+imgNum];
		oListener.imgNum = imgNum;
		my_mcl.loadClip(fileName, load_mc);
	} else {
		//すべての画像の読み込みが完了したときの処理
		//_root.gotoAndStop(2);
	}
}
というような感じで。


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

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

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