少しずつでもHSPのプロジェクトを完成に近づけなければ。
そもそも、何を作るかすら決まっていないけどな!
さて、今日の目標は、
追記:過去のソースコードに、#module が記述されていた。ただ、それだけで、modfuncなどは使ってなかった模様。
とりあえず、インスタンスを作り、モジュール関数をコールし、
いわゆる、セッターやゲッターの動作も確認できた。
一通りやった(つもり)なので、早速実践。
ゲームには必須である、画面のフェードイン/アウトアウト機能をmoduleで作ってみる。
基本は、過去に deffunc で作ったものをコピペ…する予定だったが、
目に余るコードだったため(笑)、1から作り直す。
とはいえ、ゲームプログラマなら、
簡単なフェードシステムのコード書くのに30分も掛からないはずだ。
というわけで、出来たものを実行っと。
う ご か な い !
いや、そんなはずは。
ちまちまとミスはあったが、そんなレベルではない、何かが違う。
試しに module外のメインループに移すと、きちんとフェードしている。
ということは、moduleが独立空間であるがゆえに、何かしらの障害が発生しているということだ。
さて、なんだろうか?
もしかして、module内では、gsel や gcopy などが使えない?
ありえそうだが、マニュアルには、そういうことは、一切書いてない。
さらに、付属のサンプルでは、思いっきり、moduleの中で、gcopyしてる。
まったくわからん!
が、独立空間という観点で見たときの問題が、もう1つあるじゃないか!
ゲーム作りの鉄則として、後から変更がありそうな部分は、define で一括で変更できるようにする。
Windowsのゲームだと、画面サイズなどが真っ先に定義される。
今回も、
#define screenW = 1280
#define screenH = 720
と定義している。
が、定義している箇所は、当然、#globalだ。
module内の gcopyは、
gcopy 1,0,0,screenW,screenH
になっている。
全くエラーは出てないが、これが悪いんじゃね?
というわけで、変更。
gcopy 1,0,0,screenW@,screenH@
うーむ、module内で全く定義せずに使用している変数は、
エラーを出さず、0として使われてるようだな。
マニュアルでは、module内から globalを参照するのは推奨しないとされている。
スクリーンのサイズを取得する変数や関数があるだろうか?
…あった。
画面の描画エリアXサイズ
ginfo_winx
画面の描画エリアYサイズ
ginfo_winy
ま、なければ、セッターで画面サイズ渡せば良いだけか。
こういうのが、やってて面白いところだな。
追記:
#define の後に、global をつけることで、全module対象になるんだと!
#define global screenW 1280
これが正解の書き方ということだな。