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


HSPTV!掲示板


未解決 解決 停止 削除要請

2017
0401
わた雲画面に水中エフェクトをかけたい4解決


わた雲

リンク

2017/4/1(Sat) 16:09:41|NO.78785

私は、cellputやgcopyといった普通の画像表示方法を使っています。
そのような画面に、水中にいるようにゆらゆらと動くエフェクトをかけることは可能でしょうか?
考えてみた方法もあるのですが、これを使うと急激に重くなり処理落ちします。


repeat redraw 0 (エフェクトをかける前の画像をウィンドウ1に描写し、全体を青っぽくする) gsel 0 t++ for f,0,600,1 pos 10.0*sin(double(t*5+f)/100.0*M_PI),f : gcopy 1,0,f,800,f next redraw 1 await 16 loop

なんとか、あまり重くならずに水中を表現できる方法はないものでしょうか?



この記事に返信する


リンク

2017/4/1(Sat) 21:35:15|NO.78788

お考えになっている方法で構わないと思います。
提出されているソースでも当方の環境では処理落ちはしませんでしたが
ひとつだけ、

pos 10.0*sin(double(t*5+f)/100.0*M_PI),f : gcopy 1,0,f,800,f
を、

pos 10.0*sin(double(t*5+f)/100.0*M_PI),f : gcopy 1,0,f,800,1
に変えると処理時間は3分の1くらいに減らせましたよ。



わた雲

リンク

2017/4/1(Sat) 22:34:45|NO.78790

なるほど!
5番目のパラメーターをboxfのように右下のY座標に設定してしまっていたのが重くなった原因だったんですね。
修正しましたら、処理落ちせず作動しました。ありがとうございます。



kanahiron

リンク

2017/4/1(Sat) 23:09:28|NO.78791

すでに解決されていますが…
ほんの少しでも速度を上げたいのなら
pos 10.0*sin(double(t*5+f)/100.0*M_PI)

pos 10.0*sin(0.0314159*(5*cnt+f))
にすると1%ほど早くなります


#uselib "winmm.dll" #cfunc msec "timeGetTime" dim hTime,180:r = 0:s = 0 screen 1 picload "" scrW = ginfo_winx scrH = ginfo_winy screen 0, scrW, scrH repeat s = msec() redraw 0 //t++ for f,0,scrH,1 //pos 10.0*sin(double(t*5+f)/100.0*M_PI),f : gcopy 1,0,f,scrW,1 pos 10.0*sin(0.0314159*(5*cnt+f)),f : gcopy 1,0,f,scrW,1 next redraw 1 hTime(cnt\180) = (msec()-s):if (cnt\15 == 0 ) {r = 0:repeat 180:r += hTime(cnt):loop:title strf("3secAvg %.2fms",(0.005555555556*r))} await 16 loop
速度計測つけてみましたのでこだわるなら試してみて下さい



わた雲

リンク

2017/4/2(Sun) 12:16:37|NO.78803

kanahironさん、わざわざありがとうございます。参考にさせていただきます。
速度計もこれからのプログラミングに役立ちそうです。



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