HSPポータル
サイトマップ お問い合わせ


HSPTV!掲示板


未解決 解決 停止 削除要請

2006
0901
ミツエモンrepeat ~ loop と goto について5解決


ミツエモン

リンク

2006/9/1(Fri) 02:19:56|NO.2207

ゲーム制御の処理でメインループを作る場合。
一般的にrepeat ~ loop , goto のどちらかで作られていますよね。
repeatの場合 cnt は増え続けると思うのですが・・・
メモリーーの無駄とかにはならないんですか?(ゲーム放置された場合など)

検証するのがはやいでしょうが…すいません。
分かる方いませんでしょうか。



この記事に返信する


osakana

リンク

2006/9/1(Fri) 05:10:58|NO.2213

試して見ました。
参考になるか分かりませんが。

repeat ,2147483500 color 255,255,255 :boxf 0,0,200,20 color 0,0,0 :pos 0,0 :mes cnt if cnt<cnt2 :dialog cnt2 cnt2=cnt await 10 loop
予想道理でしたね。

逆バージョンも。

repeat ,2147483500*2 color 255,255,255 :boxf 0,0,200,20 color 0,0,0 :pos 0,0 :mes cnt await 10 loop
4バイトの中を回ってるだけだと思うので、
メモリとか負荷とか大丈夫ではないかと・・・。
ちなみに私はgoto *main派です。



ミツエモン

リンク

2006/9/1(Fri) 07:19:01|NO.2215

ありがとうございます。
私の方でも一応やってみましたがそれほど変わらなかった印象です。

ちなみに、その時にrepeatとgotoの速度を比べてみましたので載せておきます。

// // 企画 : change & ミツエモン // // while,for,repeat,gotoどれが速い? // #define LP 500000 // ---------------------------------------------------------------- // while loop // ---------------------------------------------------------------- wait 100 mes "whileループします!" startTime = gettime(6) * 1000 + gettime(7) while a < LP a++; wend lastTime = gettime(6) * 1000 + gettime(7) time = lastTime - startTime; mes time + "ms\n" // ---------------------------------------------------------------- // for loop // ---------------------------------------------------------------- wait 100 mes "forループします!" startTime = gettime(6) * 1000 + gettime(7) for b, 0, LP, 1 next lastTime = gettime(6) * 1000 + gettime(7) time = lastTime - startTime; mes time + "ms\n" // ---------------------------------------------------------------- // repeat loop // ---------------------------------------------------------------- wait 100 mes "repeatループします!" startTime = gettime(6) * 1000 + gettime(7) repeat LP loop lastTime = gettime(6) * 1000 + gettime(7) time = lastTime - startTime; mes time + "ms\n" // ---------------------------------------------------------------- // goto loop // ---------------------------------------------------------------- wait 100 mes "gotoループします!" startTime = gettime(6) * 1000 + gettime(7) *RUPU c++ if( c > LP ) : goto *exit goto *RUPU *exit lastTime = gettime(6) * 1000 + gettime(7) time = lastTime - startTime; mes time + "ms\n"

ありがとうございました。



osakana

リンク

2006/9/2(Sat) 04:16:02|NO.2235

やっぱりrepeatが一番早いのね。
repeatのcntを固定してみました。
これで安心してrepeatで無限ループが出来るぞ(笑)

repeat color 255,255,255 :boxf 0,0,200,20 color 0,0,0 :pos 0,0 mes cnt await 10 continue 0 loop



レヴィン

リンク

2006/9/2(Sat) 12:33:29|NO.2237

ここに実験結果がありました
http://www.hspdx.net/hspyarou/2001.html



GENKI

リンク

2006/9/3(Sun) 00:30:35|NO.2241

repeatとgotoの違いにはネストレベルの問題もありますね。



ONION software Copyright 1997-2021(c) All rights reserved.