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


HSPTV!掲示板


未解決 解決 停止 削除要請

2015
0529
yuyuk***動きが鈍る8解決


yuyuk***

リンク

2015/5/29(Fri) 22:14:12|NO.69481

下のように●を動かすとします。
下のように行がすくないときれいに動くのですが
repeat〜loopを重ねたりすると
動きが遅くなり、ぶれてしまいます…
しょうがないのですか?
何か改善策はありますか?



repeat redraw 0 color : boxf stick key,15 if key&1 : x=x-8 if key&2 : y=y-8 if key&4 : x=x+8 if key&8 : y=y+8 color 255,255,255 pos x,y font"",40 mes "●" redraw 1 await 1 loop



この記事に返信する


スペース

リンク

2015/5/29(Fri) 22:23:21|NO.69482

無駄を可能な限り省くしか無いです。
まずredrawは再描画の範囲をできるだけ小さくした方が処理が早くなります。
そして、mes "●"は何度も描画していますよね。
これgcopy等他の方法とくらべてどちらが速いか等を1つ1つ試してみる等。
d3getfps()というfpsを測定する関数があるので、これを使うことをお勧めします。



窓月らら

リンク

2015/5/29(Fri) 22:28:42|NO.69483

> repeat〜loopを重ねたりすると
> 動きが遅くなり、ぶれてしまいます…
動きが遅くなるというのがイマイチよくわからなかったのですが
awaitのところは

await 17-(cnt\3=0)
としたほうがいいかも。
(16 17 17 16 17 17 ...を繰り返す) (16+17+17)/3=16.6666666666667



スペース

リンク

2015/5/29(Fri) 22:36:41|NO.69485

>窓月ららさん
fps60を維持するのに毎回fps測定したり色々したりしてたけどそんな方法があったとは!



通りすがり

リンク

2015/5/29(Fri) 22:59:25|NO.69486

白い文字を黒い文字で上書きしてみては

color : boxf

repeat
redraw 0
color
pos x-2,y-2
font"",45
mes "●"

stick key,15
if key&1 : x=x-8
if key&2 : y=y-8
if key&4 : x=x+8
if key&8 : y=y+8
color 255,255,255
pos x,y
font"",40
mes "●"
redraw 1
await 1
loop



暇人

リンク

2015/5/30(Sat) 00:20:01|NO.69491

> await 1
ゲームとか作ってるならウェイトが短すぎる
このウェイトに合わせて移動速度等決めてしまうと
処理が増えるて1msに収まらなくなったらゲーム動作が重くなる

NO.69483で言われてる通り16程度した方が作り易い

font"",40 repeat redraw 0 color : boxf stick key,15 if key&1 : x=x-8 if key&2 : y=y-8 if key&4 : x=x+8 if key&8 : y=y+8 repeat 100 color rnd(255),rnd(255),rnd(255) pos rnd(640),rnd(480) mes "■" loop color 255,255,255 pos x,y mes "●" redraw 1 await 16 loop



yuyuk***

リンク

2015/5/31(Sun) 13:42:39|NO.69552

ありがとうございました!
やってみたらよくなりました!



yuyuk***

リンク

2015/5/31(Sun) 20:08:26|NO.69560

すみません

Fpsはどうやって維持するのですか??(;・ω・)



暇人

リンク

2015/5/31(Sun) 20:43:33|NO.69563

await 16にしとけば1フレーム内の処理時間が16ms以内なら
自動でFPS60付近になる

font"",40 repeat redraw 0 color : boxf stick key,15 if key&1 : x=x-8 if key&2 : y=y-8 if key&4 : x=x+8 if key&8 : y=y+8 repeat 100 color rnd(255),rnd(255),rnd(255) pos rnd(640),rnd(480) mes "■" loop color 255,255,255 pos x,y mes "●" pos 0,0 color 255 mes fps redraw 1 await 16 //かなり適当なFPS計測処理 fps_cnt++ if t ! gettime(6) { t=gettime(6) fps=fps_cnt fps_cnt=0 } loop
但しoncmdやonkey等のon系割り込み命令を使うと
await中の待機を抜けてしまうので
自分で時間を計測する必要が出てくる



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