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

パスワード:


パスワード紛失

新規登録
メインメニュー
メイン
   コーダーズルーム【スクリプト系】
     外部SWFとCPUの使用率
投稿するにはまず登録を

スレッド表示 | 新しいものから 前のトピック | 次のトピック | 下へ
投稿者 スレッド
nektixe
Åê¹ÆNo.11530
投稿日時: 2004-10-15 13:38
新米
居住地:
投稿: 2
使用環境:
Windows2000SP4,Flash MX2004 version7.2
外部SWFとCPUの使用率
みなさん、はじめまして。

XMLから読み込んだデータを表示するFlashを作っています。
その中で同じレイアウトの表示を場合によって1?10個表示したいと思っています。

1つのファイルで作ってもいいのですが、デザインのレイアウトの変更の手間などを考えて、親SWFから子SWFを読み込んで、子SWFのデザインを変更するだけで済むようにしたいのです。
ところが、実際に外部SWFを複数個読み込むとPCのCPU使用率が高いままになってしまう問題に直面しています。

以下のようなスクリプトを書いています。

親 parent.swf
var n=5 //表示個数
var Dat='test&test2&test3';

for(i=1;i<n+1;i++){
	_root.createEmptyMovieClip("amc"+i, 10+i);
	with (_root["amc"+i])
	{
		_x = 0;
		_y = 50*i-50;
		loadMovie("child.swf");
	}
	child(i);
}

function child(i){
	this["nID"+i] = setInterval(function () {
	  if (_root["amc"+i].aStart != undefined) {
		_root["amc"+i].aStart(Dat);
		clearInterval(this["nID"+i]);
	  }
	}, 10);
}


子 child.swf
テキストフィールド"test" html=trueを配置
function aStart(pn){
	var data = pn.split('&');
	this.test.htmlText = data[0];
	myFormat = this.test.getTextFormat();
	myFormat.url = 'http://www.hogehoge.jp/'+data[1]+'/'+data[2]+'/';
	this.test.setTextFormat(myFormat);
}


ご覧のように子SWFは単純にテキストを表示するだけなのですが、これでも10個読み込むと、私のマシン(AthronXP1700+、512MB)ではCPU使用率が40%前後になり、実際使うもう少し複雑な表示だと5個読み込んだだけで常時100%を越える状態になります。
親も子もフレームレート30で作成してます。
フレームレートを1まで下げると、どうにか30%程度の使用率になるのですが、これでは意味がないので。

やはり、外部SWFはこういったデザインの手間低減に使うべきものではないのでしょうか?
もし負荷を下げる方法がありましたら、ご教授ください。
よろしくお願いします。
youich
Åê¹ÆNo.11534
投稿日時: 2004-10-15 14:49
職人
居住地: kobe
投稿: 349
使用環境:
Tiger
Re: 外部SWFとCPUの使用率
引用:

1つのファイルで作ってもいいのですが、デザインのレイアウトの変更の手間などを考えて、親SWFから子SWFを読み込んで、子SWFのデザインを変更するだけで済むようにしたいのです。
ところが、実際に外部SWFを複数個読み込むとPCのCPU使用率が高いままになってしまう問題に直面しています。

以下のようなスクリプトを書いています。

親 parent.swf
var n=5 //表示個数
var Dat='test&test2&test3';

for(i=1;i<n+1;i++){
	_root.createEmptyMovieClip("amc"+i, 10+i);
	with (_root["amc"+i])
	{
		_x = 0;
		_y = 50*i-50;
		loadMovie("child.swf");
	}
	child(i);
}

function child(i){
	this["nID"+i] = setInterval(function () {
	  if (_root["amc"+i].aStart != undefined) {
		_root["amc"+i].aStart(Dat);
		clearInterval(this["nID"+i]);
	  }
	}, 10);
}

たぶんsetIntervalがクリアーできてないんだと思います。
function child(i) {
	var id = setInterval(function () {
		if (_root["amc"+i].aStart != undefined) {
			_root["amc"+i].aStart(Dat);
			trace('setInterval finished: '+id);
			clearInterval(id);
		}
	}, 10);
}


----------------
- yo

KURAGE
Åê¹ÆNo.11535
投稿日時: 2004-10-15 14:51
常連
居住地: 東京都
投稿: 199
使用環境:
Flash 4?8/Lite 1?2
2000/XP
OSX 10.3
qurage.net
AS2HTML
Re: 外部SWFとCPUの使用率
こんにちは

まず「なぜ重いのか」を調べてみましょう
・外部ファイルを読み込むから重いのか?
・スクリプトが重いのか?
・フレームレートのためか?
考えうる原因は色々あると思います。


さらっと見た限りですが、
今回の場合はclearIntervalが意図した動作をしていない為、
延々とaStartが実行されてるのだと思います。
nektixe
Åê¹ÆNo.11553
投稿日時: 2004-10-16 17:53
新米
居住地:
投稿: 2
使用環境:
Windows2000SP4,Flash MX2004 version7.2
Re: 外部SWFとCPUの使用率
youichさん、KURAGEさん、ありがとうございます。

youichさんのコードのおかげで無事、負荷が下がりました。
これで100個表示しても大丈夫になりました

サンプルコードの意味を理解せずにそのまま使っていたのが、今回のトラブルの大元のようです。
今後気をつけようと思います。

2週間ほど悩んでいたので、本当に助かりました。
ありがとうございました。
スレッド表示 | 新しいものから 前のトピック | 次のトピック | トップ

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