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

パスワード:


パスワード紛失

新規登録
メインメニュー
メイン
   コーダーズルーム【スクリプト系】
     ものすごーく時間のかかる処理
投稿するにはまず登録を

スレッド表示 | 新しいものから 前のトピック | 次のトピック | 下へ
投稿者 スレッド
Hamagon
Åê¹ÆNo.6684
投稿日時: 2004-4-28 11:44
新米
居住地:
投稿: 25
使用環境:
自作PC Athron1.3Ghz + 512M
WindowsXP
Flash MX
Flash Mx2004proffesional
ものすごーく時間のかかる処理
例えばこんな感じの処理でして、

function loopProcess()
{
while(1)
{
//ここが何百回もループする処理
  if( endprocess == true )
{
break;
}
}
}

こんなふうファンクションの中でずーっとループする処理を組むと、プレイヤーでの実行時に、
「スクリプトのせいでプレイヤーが重くなっています。」
というような警告が出ます。
スクリプトが無限ループしている場合を考慮しての措置だと思うのですが、さて、

その1
 パブリッシュ時の設定などでこの警告を出さなくする方法はないのでしょうか?

その2
 そもそも、このような作り方にするのがわるい、ということなのでしょうが、大量の処理をしながら、時々描画を更新する、というのはどうすればいいのでしょう?
 FLASHはフレームが進むときに描画が更新されているようですが、functionの中でやりたいことを、フレームを進めながら行う…なんて、もうどうしたらよいやら

どなたか助言いただければと思います。
よろしくおねがいします
かずぃ
Åê¹ÆNo.6685
投稿日時: 2004-4-28 12:07
半人前
居住地:
投稿: 49
使用環境:
98SE 10.3 MX
Re: ものすごーく時間のかかる処理
引用:
Hamagonさんは書きました:
その1
 パブリッシュ時の設定などでこの警告を出さなくする方法はないのでしょうか?

それは、できないでしょう。クラッシュするとわかっているものに許可をあたえてしまったら大変ですよ。

引用:
その2
 そもそも、このような作り方にするのがわるい、ということなのでしょうが、大量の処理をしながら、時々描画を更新する、というのはどうすればいいのでしょう?

たしかに大量のループを設計に取り入れた時点で間違いだとは思いますが、その大量の処理がどのような内容の処理なのか、具体的な記述があればもう少し突っ込んだ議論ができるかもしれませんよ。
Hamagon
Åê¹ÆNo.6690
投稿日時: 2004-4-28 12:28
新米
居住地:
投稿: 25
使用環境:
自作PC Athron1.3Ghz + 512M
WindowsXP
Flash MX
Flash Mx2004proffesional
Re: ものすごーく時間のかかる処理
具体的な処理は、「チェスの思考ルーチン」を想像していただければ近いです。
各コマごとに、動かしたときに「チェック」になる手を捜す、みたいな処理です。

なので、一つの駒の処理が終わった時に描画をすればいいとは思うのですが…
野中文雄
Åê¹ÆNo.6692
投稿日時: 2004-4-28 12:45
ちょんまげら
居住地: 東京
投稿: 4531
使用環境:
CS5.5 .6.8 Vista Home Premium (SP1)
Re: ものすごーく時間のかかる処理
現在は20万回の制限はなくなっていたと思いますので、15秒ルールにひっかかっているのでしょう。
引用:
Hamagonさんは書きました:
  while(1)
   {
   //ここが何百回もループする処理
  if( endprocess == true )
      {
      break;
      }
   }
}

こんなふうファンクションの中でずーっとループする処理を組むと、プレイヤーでの実行時に、
「スクリプトのせいでプレイヤーが重くなっています。」
というような警告が出ます。

Katoさんが、フレームループと組合わせたループ処理のサンプルを公開されています。

ただループ処理中は、描画はもちろん、ユーザーインタラクションも停止されます。可能であれば、長時間のループを避けるデザインにするのがよいと思います。


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

salvox
Åê¹ÆNo.6854
投稿日時: 2004-5-4 7:07
常連
居住地: 東京都
投稿: 73
使用環境:
Windows2000
FlashMX
テキストエディター:EmEditor
Re: ものすごーく時間のかかる処理
FlashのActionScriptは、基本的にはインタープリタ言語なので、Forループや、Whileループが回ってる時には、それしか処理ができないんですよ。特に、Flashに限っては、フレームという時間の制約の中で、一連のスクリプトを処理しなければいけないので、なるべく早く処理を終わらせようと、CPUリソースを相当食います。特にForループにいたっては、Whileループよりも、リソースを食う傾向があるようです。

で、解決策としては、FlashMXやFlash2004を使ってらっしゃるのなら、setInterval()で、更新時間を、ものすごく早くしてスレッドとして、処理させるか、onEnterFrameで、処理させるのが、スマートなやり方だと思います。

onEnterFrameでまわすとフレームに同期して処理が行われるので、『チェスの思考ルーチン』のような場合は、適切ではありませんよね。
おそらく、setInterval()で、更新時間を 1?120ぐらいの間で処理させて、回してる関数の中に、onDone()のような、イベントハンドラを独自に設定して、処理が終わったら、onDone()が呼び出されるような処理にしておけば、処理が終わったのも取得できますよね。

そんなんで、ど?でしょう?
もちろん、回す関数内は、ループ文ではなく、if文 + ループカウンターみたいな感じで。


----------------
(C)SalvoxStudioStation

youich
Åê¹ÆNo.6860
投稿日時: 2004-5-4 13:08
職人
居住地: kobe
投稿: 349
使用環境:
Tiger
Re: ものすごーく時間のかかる処理
引用:

その1
 パブリッシュ時の設定などでこの警告を出さなくする方法はないのでしょうか?


根本的な解決法じゃないですけど、swf7から[ScriptLimits Tag]がサポートされてるので
timeoutとrecursionの回数の変更をしようと思えばできると思います。
おそらくFlashIDE上では設定できないと思いますので(たぶん)
swfをassemble,disassemblesできるソフトで書き換えですね。(^^;

引用:
6.ScriptLimits
The ScriptLimits tag includes two fields which can be used to override the default settings for maximum recursion depth and ActionScript time-out: MaxRecursionDepth and ScriptTimeoutSeconds.
The MaxRecursionDepth field sets the ActionScript maximum recursion limit.
The default setting is 256 at the time of this writing. This default can be changed to any value greater than 0.
The ScriptTimeoutSeconds field sets the maximum number of seconds the player should process ActionScript before displaying a dialog box asking if the script should be stopped.
The default value for ScriptTimeoutSeconds varies by platform and is between 15 to 20 seconds.
This default value is subject to change.The minimum file format version is SWF 7.


引用:
その2
大量の処理をしながら、時々描画を更新する、というのはどうすればいいのでしょう?

そういえば、前にsetIntervalを使ったloopの分割をポストしたことがあります。
http://www.flash-jp.com/modules/newbb/viewtopic.php?topic_id=464&forum=6&post_id=2854#forumpost2854


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

Hamagon
Åê¹ÆNo.7448
投稿日時: 2004-5-21 7:06
新米
居住地:
投稿: 25
使用環境:
自作PC Athron1.3Ghz + 512M
WindowsXP
Flash MX
Flash Mx2004proffesional
Re: ものすごーく時間のかかる処理
レスくださった方々、どうもありがとうございました。

しばらくネットにつなげない状況になってしまい、御礼が大変遅くなってしまいました、申し訳ありませんでした。

いただいたご意見を参考にさせていただきます。
スレッド表示 | 新しいものから 前のトピック | 次のトピック | トップ

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