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


HSPTV!掲示板


未解決 解決 停止 削除要請

2013
0923
ZAPhgimg3の event_wait のフレームの考え方について4解決


ZAP

リンク

2013/9/23(Mon) 13:43:18|NO.57304

hgimg3の event_waitを使って、
オブジェクト(Xモデル)をイベントにより1フレーム単位で拡縮することで擬似的に点滅させようと考え、


newevent eventID_Tenmetu ;イベント設定(擬似点滅) repeat 90 event_setscale eventID_Tenmetu,0,0,0 ;サイズを0にして見えなくする event_wait eventID_Tenmetu,1 ;1フレームウェイト event_setscale eventID_Tenmetu,SCALE,SCALE,SCALE ;SCALE=本来のサイズ event_wait eventID_Tenmetu,1 ;1フレームウェイト loop <

というイベントリストを作成しました。

これを60fps環境下で適用すると、90×2=180で、約3秒間点滅する計算となる筈ですが、
実際にはもっと長い時間(9秒くらい?)、ゆっくりした点滅が続きます。

1フレーム単位のウェイト制御を行いたい場合、どういう記述をすればよいでしょうか?
また、根本的な話として、event_waitで設定するフレーム数はどう考えればよいのでしょうか?

今回のケースではループ数自体を約1/3に減らせば解決するのですが、
フレーム単位でのアニメーションや、メインプログラムの処理と連動させたい場合、
どうしても基本的な考え方を抑えておく必要があると思い、質問させて頂きました。



この記事に返信する


暇人

リンク

2013/9/23(Mon) 15:43:58|NO.57306

event_waitは最低でも3フレーム処理がかかる(0を指定しても・・・)
仕様だとしても機能的にバグに近い動作だな・・・
event_wait 100 としても次のevent行に行くのは103フレーム目

#include "hgimg3.as" screen 0,640,480,0 cls 4 hgini setfont 16,16,12,1 ; font Tex select(cx,cy,px,mode) texload dir_exe+"\\sample\\hgimg3\\fontchr.bmp" ; フォントテクスチャの登録 addxfile m_xmodel,dir_exe+"\\sample\\hgimg3\\font_a.x" ; モデルを読み込む SCALE=2.0 event_wt=0 newevent eventID_Tenmetu repeat 90 event_addwork eventID_Tenmetu,1 event_setscale eventID_Tenmetu,0,0,0 event_wait eventID_Tenmetu,event_wt event_addwork eventID_Tenmetu,1 event_setscale eventID_Tenmetu,SCALE,SCALE,SCALE event_wait eventID_Tenmetu,event_wt loop event_wt2=1 newevent eventID_Tenmetu2 repeat 90 event_addwork eventID_Tenmetu2,1 event_setscale eventID_Tenmetu2,0,0,0 event_wait eventID_Tenmetu2,event_wt2 event_addwork eventID_Tenmetu2,1 event_setscale eventID_Tenmetu2,SCALE,SCALE,SCALE event_wait eventID_Tenmetu2,event_wt2 loop regobj obj, m_xmodel,,eventID_Tenmetu regobj obj2, m_xmodel,,eventID_Tenmetu2 setpos obj,-10 setpos obj2,10 clscolor $4040 *main stick key,$3ff if key&128 : goto *owari hgdraw getworki obj,wx,wy,wz getworki obj2,wx2,wy2,wz2 total_fps++ fprt "total_fps("+total_fps+") wx("+wx+") wx2("+wx2+")",8,8 hgsync 15 if total_fps=180{stop} goto *main *owari end


関係ないけど
> event_setscale eventID_Tenmetu,SCALE,SCALE,SCALE ;SCALE=本来のサイズ
全角のスペースでSCALEが別の変数になってる



ZAP

リンク

2013/9/23(Mon) 20:10:32|NO.57310

暇人さま

回答ありがとうございます。
サンプルも、イベントの中にワーク変数をかませて、それを監視するという手法は
まったく考えつかなかったので勉強になりました。

とりあえず、これが仕様ということでしたら、それに合わせてコードを書くだけですね。
(書き方によって挙動が変わる、というのでなければ)

>全角のスペースでSCALEが別の変数になってる
元々のコードを投稿用に弄ったときに、変数名を一般的なものにしようとして修正した際に
全角スペースが入ったようです。
検証用としてはよくなかったですね。失礼しました。



ZAP

リンク

2013/9/23(Mon) 20:14:35|NO.57312

hgimg3の次回更新時(あるのか?)には、この仕様をマニュアルに明記してもらうか、
修正しておいてほしいところですね。

っていうか、これって「よくある質問とその答え」だったのでしょうか?
それとも、この機能自体それほど使われていないから話題にすら上がっていない?



暇人

リンク

2013/9/23(Mon) 21:46:28|NO.57313

ゲームに使うとすると
ゲーム中にポーズ機能(ポーズじゃなくても一時的に止めたい)付けようとしてもeventを止める事は出来ない
event_jumpはあるけど条件分岐はランダムのみ
中々使い勝手が悪いからねぇ・・・

大量に同じ処理させたいときにスクリプト側でやるより圧倒的に軽いから
使える場合は結構良いんだけど・・・

同じオブジェクトに4個eventセットできるので
それ利用して1フレーム毎に点滅させるサンプル

#include "hgimg3.as" screen 0,640,480,0 cls 4 hgini setfont 16,16,12,1 ; font Tex select(cx,cy,px,mode) texload dir_exe+"\\sample\\hgimg3\\fontchr.bmp" ; フォントテクスチャの登録 addxfile m_xmodel,dir_exe+"\\sample\\hgimg3\\font_a.x" ; モデルを読み込む SCALE=2.0 event_wt=2 repeat 4 newevent eventID_Tenmetu(cnt) eventID=eventID_Tenmetu(cnt) _SCALE=SCALE*(cnt\2) repeat 90 event_addwork eventID,1 event_setscale eventID,_SCALE,_SCALE,_SCALE event_wait eventID,event_wt loop loop regobj obj, m_xmodel,,eventID_Tenmetu regobj obj2, m_xmodel setpos obj,-10 setpos obj2,10 clscolor $4040 *main stick key,$3ff if key&128 : goto *owari if (total_fps\2)=1 {setscale obj2,SCALE,SCALE,SCALE}else{setscale obj2,0,0,0} hgdraw getworki obj,wx,wy,wz total_fps++ fprt "total_fps("+total_fps+") wx("+wx+")",8,8 hgsync 15 if total_fps=180:stop if wx<4:setevent obj,eventID_Tenmetu(wx),wx goto *main *owari end
ここまでするなら
event使わない方が楽って感じになっていく・・・



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