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

パスワード:


パスワード紛失

新規登録
メインメニュー
メイン
   FLASHおもちゃ箱【ゲームについてあれこれ】
     背景スクロールのスピード
投稿するにはまず登録を

スレッド表示 | 新しいものから 前のトピック | 次のトピック | 下へ
投稿者 スレッド
テライユタカ
Åê¹ÆNo.13468
投稿日時: 2004-12-19 14:16
常連
居住地: わかやま
投稿: 88
使用環境:
iMac G5 10.4.9 + iBook G4 10.3.9 + Flash8
背景スクロールのスピード
こりずにまたRPG作ってます。
背景のスクロールスピードについて、ちょっと気になることが発生しました。
どうしようか悩んでます。助言いただければ幸いです。

【制作状況】
30×30ピクセルのマップチップを作り、多数並べて背景としてスクロールさせているのですが、マップチップをムービークリップに変換したものを使用するより、GIF画像そのままの方がスクロール処理が速いのです。
動作確認のため、Scriptは同じで、背景のみ差し替えたものを作成し、背景の一番上から一番下まで移動した時間をストップウォッチで計りました。

【動作環境】
Flash MX 2004にて作成
eMac 700MHz、RAM:768MB、OS:MacOS 10.3.7
以下、ビットマップの背景を使用…BM、ムービークリップに変換した背景を使用…MCで記載。
ただし多少の誤差はあると思います。
また、会社のWindowsXP Pro、PentiumM1.4G、RAM:512では、ほとんど違いは計測できませんでした。(たぶん高速すぎるため)

1.SAFlashPlayerで動かした場合
BM:7.5sec
MC:9.2sec

2-1.SWFファイルをSafariで動かした場合
BM:8.4sec
MC:8.4sec

2-2.SWFをIEで動かした場合
BM:8.8sec
MC:9.1sec
ファイル:
BM:http://www2.ocn.ne.jp/~alpha/speed_bm.html
MC:http://www2.ocn.ne.jp/~alpha/speed_mc.html

3.SWFよりプロジェクタを作成し動かした場合
(上記が最終配布目的です)
MB:7.4sec
MC:9.5sec
ファイル:http://www2.ocn.ne.jp/~alpha/SpeedTest.zip

参考にFlashファイル:http://www2.ocn.ne.jp/~alpha/SpeedTestFla.zip

以上の結果から、MCに変換せずに使用した方が良いのでしょうか?


----------------
TERAI YUTAKA
HomePage: SITE ALPHA

空野大二郎
Åê¹ÆNo.13471
投稿日時: 2004-12-19 17:42
職人
居住地: 愛知
投稿: 389
使用環境:
 XP:Home
FlashMX
IE6.0+FlashPlayer7,0,19
CPU:Pentium4 2.26GHz
メモリ:1,024MB
Re: 背景スクロールのスピード
 まいど。

 差を確認しました。(スピードが見られなかったためCPU負荷で)

  CPU使用率(平均値)
BM:22%
MC:66%

環境:
CPU: Pentium 4-2.26GHz
メモリ: 1GB
GPU: GeForce FX5200 128MB
OS: WindowsXP Home SP2
ブラウザ:Internet Explorer 6.0.29
プラグインバージョン:FlashPlayer 7.0.19
引用:

テライユタカさんは書きました:
2-2.SWFをIEで動かした場合
BM:8.8sec
MC:9.1sec
ファイル:
BM:http://www2.ocn.ne.jp/~alpha/speed_bm.html
MC:http://www2.ocn.ne.jp/~alpha/speed_mc.html


 なぜ?
 ともかく、これだけの差を知れば、ビットマップをそのまま使う
魅力があります。
 (参考ファイル、Flash7形式ですから構造を確認していませんが)


----------------
空野 大二郎 アニメーター作家
桜の道

テライユタカ
Åê¹ÆNo.13493
投稿日時: 2004-12-20 12:19
常連
居住地: わかやま
投稿: 88
使用環境:
iMac G5 10.4.9 + iBook G4 10.3.9 + Flash8
Re: 背景スクロールのスピード
引用:
差を確認しました。(スピードが見られなかったためCPU負荷で)

そうですよね、CPU負担で調べるってのが一番確実で手っ取り早いですよね。
気づきませんでした。

で、結果CPU使用率(だいたいの平均)
eMac 700MHz RAM:768MB MacOS10.3.7
BM:82%
MC:98%

PentiumM 1.4GHz RAM:512BM Windows XPpro
BM:16%
MC:59%

やっぱぜんぶビットマップで作り直した方が良さそうですね?。
でも、なんでだろ?う?


----------------
TERAI YUTAKA
HomePage: SITE ALPHA

空野大二郎
Åê¹ÆNo.13494
投稿日時: 2004-12-20 12:46
職人
居住地: 愛知
投稿: 389
使用環境:
 XP:Home
FlashMX
IE6.0+FlashPlayer7,0,19
CPU:Pentium4 2.26GHz
メモリ:1,024MB
Re: 背景スクロールのスピード
 まいど。

 よろしければ、構成を教えていただけませんか?

 (こんなかんじかしら?640*480、12fpsにて)
1:マップチップをムービークリップに変換したものを使用
_root.map1_mc
     └─mapChip_mc(複数)
          └─mapChip.gif
 (CPU使用率:22%)

2: GIF画像そのまま
_root.map1_mc
     └─mapChip.gif(複数)
 (CPU使用率:35%)

引用:
テライユタカさんは書きました:
【制作状況】
30×30ピクセルのマップチップを作り、多数並べて背景としてスクロールさせているのですが、マップチップをムービークリップに変換したものを使用するより、GIF画像そのままの方がスクロール処理が速いのです。
動作確認のため、Scriptは同じで、背景のみ差し替えたものを作成し、背景の一番上から一番下まで移動した時間をストップウォッチで計りました。


----------------
空野 大二郎 アニメーター作家
桜の道

テライユタカ
Åê¹ÆNo.13495
投稿日時: 2004-12-20 13:08
常連
居住地: わかやま
投稿: 88
使用環境:
iMac G5 10.4.9 + iBook G4 10.3.9 + Flash8
Re: 背景スクロールのスピード
はい。そのとおりです。
いろいろテスト中で14fpsになっていました。

1:マップチップをムービークリップに変換したものを使用
_root.town1_mc
     ├chara_mc(キャラクター3人)
     └─mapChip_mc(複数 横24*縦34)
          └─mapChip.gif
2:GIF画像そのまま
_root.town1_mc
     ├chara_mc(キャラクター3人)
     └─mapChip.gif(複数 横24*縦34)
です。
ActionScriptは全て_rootのフレームに記述しています。


----------------
TERAI YUTAKA
HomePage: SITE ALPHA

空野大二郎
Åê¹ÆNo.13497
投稿日時: 2004-12-20 14:31
職人
居住地: 愛知
投稿: 389
使用環境:
 XP:Home
FlashMX
IE6.0+FlashPlayer7,0,19
CPU:Pentium4 2.26GHz
メモリ:1,024MB
Re: 背景スクロールのスピード
 まいど。

 うぬう、こちらも14fpsで再度測定してみました。
 スクリプトは単純に、onClipEvent(enterFrame)で_root.map1_mcの
_x位置を+15ずつにして表示させています。

_root.map1_mc
     └─mapChip_mc(複数)
          └─mapChip.gif
 (CPU使用率:25%)

2: GIF画像そのまま
_root.map1_mc
     └─mapChip.gif(複数)
 (CPU使用率:40%)

 この条件では、2のGIF画像そのままの方が負荷が高いという
結果になっております。


 テライユタカさんのテストファイルも、背景の位置を移動させて、
キャラクターも中央に表示させているでしょうから、単純には同じ
結果が得られると考えていたのですが、どうにも違うようですね。

 動作の差を突き詰めるなら、テスト環境をもう少し分解してみる
必要があると考えられます。

<例>
1:現在の状態
2:キャラクタの移動を排除
3:キャラクタの移動、キャラクタのグラフィックを排除
4:mapChip_mcのmapChip.gif、またはmap1_mcのmapChip.gifを
排除(mapChip_mcがあるかないかで、動作の差が発生するのか検証)
5:mapChip_mc.mapChip.gifではなく、mapChip.mapChip.gif
(グラフィックとして格納)も測定

 影響している(と思われる)部分を排除して測定することで、
問題を絞り込めます。
 得られた結果から、動作原理を推測して、適切な判断を下せる
ようになる、かも知れません。(でも、時間がかかります。)
 時間と労力とに相談しながら、ご判断下さい。


----------------
空野 大二郎 アニメーター作家
桜の道

テライユタカ
Åê¹ÆNo.13507
投稿日時: 2004-12-20 17:28
常連
居住地: わかやま
投稿: 88
使用環境:
iMac G5 10.4.9 + iBook G4 10.3.9 + Flash8
Re: 背景スクロールのスピード
引用:
この条件では、2のGIF画像そのままの方が負荷が高いという
結果になっております。

空野さん、貴重なお時間を割いていただき、どうもです。

う?ん、ますますわからなくなってきました。
空野さんの書かれているように、すべての要因を分解して検証してみました。

1:新規に2つのファイルを作成

ファイル名:speedTestBM.fla
_root.map1_mc
   └mapChip.gif(複数)
 ※mapChip_mcは作成しない状態で検証

ファイル名:speedTestMC.fla
   └mapChip_mc
      └mapChip.gif

gif画像は30*30pixel新規に作成
両ファイルとも横20*縦30個配置
キャラなどの余計なファイルは何も作成していません
ライブラリ内は
 BM:map1_mc、mapChip.gifのみ
 MC:map1_mc、mapChip_mc、mapChip.gifのみ
キーのUPで上にスクロール、DOWNで下にスクロールさせるため、メインフレームに以下のScriptを記載

onEnterFrame = function () {
 if (Key.isDown(Key.DOWN)) {
  this.map1_mc._y -= 10;
   else if (Key.isDown(Key.UP)) {
  this.map1_mc._y += 10;
 }
}

で結果
BM:15%
MC:38%

なお、ファイルMCをムービークリップからグラフィックに変換しても、差はないように思われました。
また、MX形式で保存し、Player6形式でも書き出してみましたが、同じ結果でした。

なんで?なんで??BMの方が負荷が小さいの?


----------------
TERAI YUTAKA
HomePage: SITE ALPHA

空野大二郎
Åê¹ÆNo.13512
投稿日時: 2004-12-20 20:18
職人
居住地: 愛知
投稿: 389
使用環境:
 XP:Home
FlashMX
IE6.0+FlashPlayer7,0,19
CPU:Pentium4 2.26GHz
メモリ:1,024MB
Re: 背景スクロールのスピード
 まいど、だいぶん分かってきました。

 [総合評価]
 Key.isDown()関数を使う場合は、MovieClip数を減らし、
ビットマップをそのまま貼り付けることに効果があると
判明しました。
引用:
テライユタカさんは書きました:
やっぱぜんぶビットマップで作り直した方が良さそうですね?。
でも、なんでだろ?う?



[ケース1]
 テライユタカさんと同じように、onEnterFrameのときにキー操作で
マップを移動させるようにしました。

//_rootのフレームスクリプトに記述
this.onEnterFrame = function () {
	if (Key.isDown (40)) {
		this.map1_mc._x -= 10;
	} else if (Key.isDown (38)) {
		this.map1_mc._x += 10;
	}
};


 すると、次のような結果になりました。
BM:35%
MC:79%


[ケース2]
 続いて、mapChip.gifを削除した状態で、キー操作でマップ移動
させてみました。

 構成
>BMのばあい
_root.map1_mc(中身は空)

>MCのばあい
_root.map1_mc(中身はmapChip_mcをマップチップの座標に複数
配置)
   └mapChip_mc(中身は空)

 結果
BM:5%
MC:40%


[ケース3]
 さらに、確認のためにmapChip.gifを削除した状態で、
onClipEvent(enterFrame)ごとの座標移動を実行

//_root.map1_mcのクリップアクションに記述
onClipEvent(enterFrame) {
	this._x -=15;
}


 結果
BM:5%
MC:5%


[ケース4]
 さらにさらに、onClipEvent(enterFrame)による、キー操作の
マップ移動を試行。
//_root.map1_mcのクリップアクションに記述
onClipEvent(enterFrame) {
	if (Key.isDown (40)) {
		this._x -= 10;
	} else if (Key.isDown (38)) {
		this._x += 10;
	}
}

BM:35%
MC:79%


 [中間評価]
 [ケース1]と[ケース2]により、Key.isDown()関数と、
複数の入れ子になっているMovieClipに因果関係があることが
分かります。
 また[ケース3]により、Key.isDown()関数を介さない
MovieClipの移動には、入れ子が複数のMovieClipであっても、
そうでなくても、グラフィックの描画にだけ負荷がかかっている
ことが分かります。
 ([ケース1]と[ケース4]との比較で、onClipEvent
(enterFrame)とMovieClip.onEnterFrameの処理には、CPU負荷の
大きな差は見られないことが分かります)


[ケース5]
 その上さらに、[ケース1]を、マップ移動なしの状態で
検証しました。(キーを押して、キー入力だけを検知させる)
//_rootのフレームスクリプトに記述
this.onEnterFrame = function () {
	if (Key.isDown (40)) {
		//this.map1_mc._x -= 10;
	} else if (Key.isDown (38)) {
		//this.map1_mc._x += 10;
	}
};


 結果
BM:5%
MC:55%

 [最終評価]
 まさかの結果です!
 Key.isDown ()関数は、ステージ上のMovieClipの数が増えると、
それに比例してCPU負荷が高くなることが分かりました。

 (これは推測になりますが、Key.isDown ()関数は、指定した
キーが押されているかどうかを調べるリアルタイム実行型の
関数なので、動作原理としてステージ上のMovieClipについても
何かを調べている、もしくはMovieClipの再描写を行っている
可能性があります。
 Key.isDown ()関数に詳しい方がいらしたら、わたしにも教えて下さい。)


----------------
空野 大二郎 アニメーター作家
桜の道

テライユタカ
Åê¹ÆNo.13529
投稿日時: 2004-12-21 12:27
常連
居住地: わかやま
投稿: 88
使用環境:
iMac G5 10.4.9 + iBook G4 10.3.9 + Flash8
Re: 背景スクロールのスピード
引用:
結果
BM:5%
MC:55%
[最終評価]
まさかの結果です!
Key.isDown ()関数は、ステージ上のMovieClipの数が増えると、
それに比例してCPU負荷が高くなることが分かりました。

おどろきの結果です!
空野さんの結果をもとに、Key.isDown()を使わずに

onClipEvent(keyDown){
 if(Key.getCode()==38){
  this._y += 1;
 }else if(Key.getCode()==40){
  this._y -=1;
 }
}

をmap1_mcに記述して調査しましたが、結果は
BM:15%
MC:38%
という結果でした。
Key.isDown()だけがCPU負担が高いって訳ではなく、Key関数がしんどいみたいですね。
やっぱRPG作るのなら、GIF画像のままの方がいいように思えてきました。

どなたかKey関数に詳しい方いらっしゃいましたら、ぜひお知恵を。


----------------
TERAI YUTAKA
HomePage: SITE ALPHA

空野大二郎
Åê¹ÆNo.13546
投稿日時: 2004-12-21 18:53
職人
居住地: 愛知
投稿: 389
使用環境:
 XP:Home
FlashMX
IE6.0+FlashPlayer7,0,19
CPU:Pentium4 2.26GHz
メモリ:1,024MB
Re: 背景スクロールのスピード
 まいど。

 onClipEvent(keyDown)もですか。
引用:

テライユタカさんは書きました:
空野さんの結果をもとに、Key.isDown()を使わずに

onClipEvent(keyDown){
 if(Key.getCode()==38){
  this._y += 1;
 }else if(Key.getCode()==40){
  this._y -=1;
 }
}

をmap1_mcに記述して調査しましたが、結果は
BM:15%
MC:38%


 もしやと思い、[ケース1]でマウスの動きだけを調べる
スクリプトにすると、やはりMovieClipが多いほうがCPU負荷が
高くなっています。

onClipEvent(mouseMove) {
}

BM:5%
MC:30%

onClipEvent (enterFrame) {
	var x = _root._xmouse;
}

BM:5%
MC:27%

 キーやマウスなどリアルタイムに動作を受け取る場合は、
ステージ上のMovieClip(たぶんオブジェクトすべてと思う)の
数が少ない方が、CPU負荷が低く抑えられるようです。
(グラフィック描画とはべつに)

 インタラクティブなコンテンツ作りには、重要になる結果だと
考えられます。


----------------
空野 大二郎 アニメーター作家
桜の道

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

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