2023/10/22(日) [n年前の日記]
#1 疑似3D道路その25
随分と日が経ってしまったけれど、
_前回の作業
の続き。HSP 3.6 を使って疑似3D道路が作れないか試しているところ。環境は Windows10 x64 22H2。
コースと言うか、道路のセグメントデータを、疑似乱数で自動生成するようにしてみた。コースを2周したら、またセグメントデータを生成し直して、別コースを走り始めるようにもしてみた。
フレームレートや仮想画面解像度を、.iniファイルから読み込んで設定するようにした。別PCで動かした際、処理落ちしないフレームレートや仮想画面解像度を探して設定し直さないといけなくなるだろうし…。.ini をメモ帳か何かで編集すれば、起動時のデフォルト値を変更できるようになったから、これで最低限のカスタマイズはできるだろう…。
そろそろある程度動くようになってきたので、ウインドウ表示ではなく、フルスクリーン表示をするように変更した。
コースと言うか、道路のセグメントデータを、疑似乱数で自動生成するようにしてみた。コースを2周したら、またセグメントデータを生成し直して、別コースを走り始めるようにもしてみた。
フレームレートや仮想画面解像度を、.iniファイルから読み込んで設定するようにした。別PCで動かした際、処理落ちしないフレームレートや仮想画面解像度を探して設定し直さないといけなくなるだろうし…。.ini をメモ帳か何かで編集すれば、起動時のデフォルト値を変更できるようになったから、これで最低限のカスタマイズはできるだろう…。
そろそろある程度動くようになってきたので、ウインドウ表示ではなく、フルスクリーン表示をするように変更した。
◎ コースデータの自動生成について :
コースデータと言うか、道路のセグメントデータは、以下の4つの値を並べていくことで生成される。
また、乱数で急カーブが出現したら、そのカーブの直前に、カーブを示す道路標識のビルボードが出るようにもしておいた。
急カーブが出現すると、道路標識ビルボードを示すセグメントが増えるので、最初からセグメントデータの総数を決めておくわけにもいかなくて…。一旦セグメントデータを作ってみてから、全部でいくつになりました、と把握して、その個数分、新たに配列を作ってコピーし直す、という処理になった。そのあたりは、 _昨日の記事にメモ しておいた。
- そのセグメントが何個続くかを示すカウント数
- カーブ量(横方向の曲がり具合)
- ピッチ量(縦方向の曲がり具合)
- ビルボードの種類
また、乱数で急カーブが出現したら、そのカーブの直前に、カーブを示す道路標識のビルボードが出るようにもしておいた。
急カーブが出現すると、道路標識ビルボードを示すセグメントが増えるので、最初からセグメントデータの総数を決めておくわけにもいかなくて…。一旦セグメントデータを作ってみてから、全部でいくつになりました、と把握して、その個数分、新たに配列を作ってコピーし直す、という処理になった。そのあたりは、 _昨日の記事にメモ しておいた。
◎ iniファイルの読み込み :
◎ フルスクリーン表示 :
HSPでフルスクリーン表示をするにはどうしたらいいのかググってみたけど、どうやら bgscr を使うのが一般的なようだなと…。
_OHDL - bgscr
この bgscr を使うと「枠無し」のウインドウを作れる。また、HSPが既に作ったウインドウを「枠無し」で再設定することもできるので、その「枠無し」ウインドウのサイズをデスクトップサイズと同じにすればフルスクリーン表示になるよね、ということらしい。
デスクトップサイズは、ginfo_dispx, ginfo_dispy で取得できる。
_OHDL - ginfo_dispx
_OHDL - ginfo_dispy
HSPは起動時に、ウインドウID=0のウインドウを生成するので、bgscr でウインドウID=0に対してサイズや表示位置を指定すればフルスクリーン表示になる。ということで、ソースの該当部分は以下のようになった。
_OHDL - bgscr
この bgscr を使うと「枠無し」のウインドウを作れる。また、HSPが既に作ったウインドウを「枠無し」で再設定することもできるので、その「枠無し」ウインドウのサイズをデスクトップサイズと同じにすればフルスクリーン表示になるよね、ということらしい。
デスクトップサイズは、ginfo_dispx, ginfo_dispy で取得できる。
_OHDL - ginfo_dispx
_OHDL - ginfo_dispy
HSPは起動時に、ウインドウID=0のウインドウを生成するので、bgscr でウインドウID=0に対してサイズや表示位置を指定すればフルスクリーン表示になる。ということで、ソースの該当部分は以下のようになった。
if FULLSCR_ENABLE { ; fullscreen screen_w = ginfo_dispx screen_h = ginfo_dispy bgscr 0, screen_w, screen_h, , 0, 0 gsel 0 cls 4 } else { ; windows display ; get windows size screen 0, SCR_W, SCR_H, 0 gsel 0 screen_w = ginfo_winx screen_h = ginfo_winy cls 4 }
◎ ソース :
[ ツッコむ ]
以上、1 日分です。