Dripです。
mzさん、こんにちは。
画面を書き換える処理を減らすことで動作速度を向上する方法ですが、
mzさんのやり方では毎フレームhgdrawが行われているため、
事実上ほとんど処理速度が高速化することはありません。
正しくは、動作環境を満たしたハイスペックなマシンでのみわずかな高速化が期待され、
本来高速化すべきロースペックなマシンでは全くと言って良いほど効果がありません。
またnaznyarkさんのアドバイスは少し意味がわかりません。
event_系命令やモーション等の動作を考慮するならば、
hgdrawを毎フレーム行っているmzさんの処理が正解です。
それらの命令が無いにしてもhgdrawを実行していないのにhgsyncを行う事は無意味です。
hgdraw命令で物体をバッファに描画(転送)し(まだ表示はされない)、
hgsyncで描画を画面に反映するので、実際の描画工程(hgdraw)を減らさない限り、
画面更新の時間を除いて処理速度は変化しません。
現状を分かり易く説明すると、次のような状態と同じです。
omosa=30 //試す処理の重さです。
//3つの処理であまり処理速度が変化しなかった場合は、この重さを調節して下さい。
pos 260,200
objsize 120,30,40
button "60FPS",*c1
button "mzさんの6FPS",*c2
button "正しい6FPS",*c3
stop
*c1
dialog {"60FPSで重い描画処理を毎フレーム実行します。
タスクマネージャでCPUの使用率を見ながら実行して下さい。
かなりの負荷が掛かっていることが分かります。"}
repeat:redraw 0
color 255,255,255:repeat omosa:boxf:loop
color:pos 320,100:mes cnt:redraw 1,0,0:await 15
loop
*c2
dialog {"mzさんの6FPSで重い描画処理を実行します。
タスクマネージャでCPUの使用率を見ながら実行して下さい。
60FPSと大して変化がないことが分かります。"}
repeat
redraw 0
color 255,255,255:repeat omosa:boxf:loop
color:pos 320,100:mes cnt
if cnt\10=0:redraw 1
await 15
loop
*c3
dialog {"正しい6FPSで重い描画処理を実行します。
タスクマネージャでCPUの使用率を見ながら実行して下さい。
かなり軽くなっていることがわかります。"}
repeat:redraw 0
color 255,255,255:repeat omosa:boxf:loop
color:pos 320,100:mes cnt*100:redraw 1:await 150
loop
正しいフレームレートの変更機能をhgimg3で取り入れるならば、
addangやsetposで指定される値を、定数ではなく1フレームに変化する量を算出して設定し、
hgsyncのウェイトを変えるべきです。
HGIMG3向けの正しいフレームレートの設定方法を以下に示します。
#include "hgimg3.as"
hgini
addbox box,10,10
regobj box,box
fps=5 //フレームレート(60より大きくするとハードウェアの制約上遅くなる場合が殆どです。)
mov=1.0 //【一秒】あたりの変化量
t=0.0
repeat
setpos box,sin(t)*100,cos(t)*100,-300
t+=mov/fps //1フレームあたりの変化量を算出して設定
hgdraw
hgsync 1000/fps
loop
少々面倒ですが、がんばってください。