株式会社リサイクルループ

ブログ

回収依頼お問合わせ

株式会社リサイクルループ

回収依頼

MENU

【HSPプログラミング講座#19】スプライト機能を表示してみよう

プログラミング講座アイキャッチ

今回のHSP言語プログラミング講座では、実際にスプライトを表示するところまでやってみたいと思います。 前回のプログラミング講座でもあったように、意味がわからない部分が多いのでワタクシも色々なテストプログラムを書いて、実行して、直してを繰り返しながら進めて行きますね!

スプライトを表示する最小プログラム

説明書を読んだり、他の人のプログラムを読みながら「スプライトを表示するために最低限必要なプログラムは何だろう?」という視点でやってみた結果、下記のようなプログラムが完成しました。 とにかく必要最低限の状態にしないと、どのような動きになっているのかを理解するのが大変ですからね。

HSPプログラミング_スプライト表示01

上記のプログラムが、スプライトを表示するための最小限のプログラムだと思いますが、今まで勉強してきた命令が見当たらなくて、新しい命令ばかりで嫌になりそうですよね。。 ワタクシも同感でございます。。 でもまぁ調べてみて、わかったところを解説していきますね。

1行目は前回のプログラミング講座でも出てきた「インクルード」です。 前回これを宣言するだけで意味不明になりましたね(涙) 未だによくわかりませんが、スプライト機能を利用するために必要らしいので、あまり深いことは考えずに「準備」だと割り切ってしまいましょう。 そして自動的にウインドウのサイズが横幅320ドット、縦幅480ドットになってしまうという謎の現象も起きるんでしたね! 覚えていますよね!?

3行目は、スプライトの初期化をしています。と言っても全然意味がわかりませんよね。 これもインクルードと同じように、とりあえず書かないと動作してくれません。 この「 es_ini 」をすることで、自動的に取り扱いできるスプライトの数が512個分確保されるようです。 それから前回も少し説明していますが、バッファと呼ばれる領域(表示されない裏の画面)に画像を置いて、そこからスプライトとして扱いたい部分を切り出して、キャラクタとして登録するということでした。 そのキャラクタの取り扱いできる数として1024個分確保されます。

5行目はもはや「呪文」のようですが、ここではバッファと呼ばれる領域(表示されない裏の画面)に画像を貼り付ける作業をしています。「 celload 」という命令の読み方は「セルロード」ですかね? たぶんセル画の「セル」のことだと思いますが、そこに画像を読み込む(ロードする)という意味になるのでしょう。

“C:\\hsp36\\sample\\game\\mapbg.bmp”,1

celload命令の右側に上記の青色部分は、「Cドライブの中にある【hsp36】フォルダの中にある【sample】フォルダの中にある【game】フォルダの中にある「mapbg.bmp」というファイルを読み込みなさい」という内容が書いてあります。 書き方としては、フォルダとフォルダの間に「\\」を入れて、全体を「”」ダブルクォーテーションで囲います。 なんとなくの理解で構いませんよ。 そしてこのmapbg.bmpファイルは下記のRPGのマップのような画像ファイルです。 現時点(2023/06/10)でのHSP言語の最新版がインストールされていれば、このファイルはあなたのパソコンにも入っていると思います。 ちなみに、このファイルの場所を示している文を「パス」と言いますよ。 そして、このパスのあとに続く赤色部分の「1」は、読み込み先ウインドウIDを指定します。 これは上記で説明している、バッファと呼ばれる領域(表示されない裏の画面)または仮想画面(非表示のウィンドウ)などとも表現しますが、全部同じことを指しています。 今回は番号に1番を指定しています。 現時点でわかったことは0番以外なら良さそうです。 0番は表示が見える表の画面のようです。

7行目の「 es_size 」はキャラクタの横幅と縦幅を決めています。下記のRPGのマップのような画像は1つが横幅64ドット、縦幅64ドットになっているので、es_size 64,64 と書いています。 これは比較的わかりやすいですよね。

9行目の「 es_pat 」はキャラクタを登録する命令です。 se_pat のあとに続く「 0,128,0,0,1 」を順番に説明していきます。 ちなみに、何かの命令の右側に入れる文字や数字のことを「パラメータ」と言いますので、頭の片隅にでも置いといてください。 第1パラメータは「キャラクタ番号」です。 プログラムの最初の方で書いた「 es_ini 」で1024個分の場所が確保されています。 数字で表すと0~1023個となります。 なので今回は一番先頭のキャラクタ番号0を登録先とします。 その後の第2パラメータと第3パラメータは下記のRPGのマップのような画像のx座標とy座標を表しています。 1つの絵柄は横幅64ドット、縦幅64ドットと説明しましたね。 下記の画像のx座標128ドット、y座標0ドットの位置を指定していますが、これは「家の画像の左上」の位置を指しています。 ここをスタート位置として横幅64ドット、縦幅64ドットの大きさで、キャラクタ番号0番の中に登録します。という意味になりますよ。 ちょっとややこしいですが、わからなければ何度も読み返してみてくださいね。 第4パラメータは今のところ0を入れると覚えておいてください(一定時間で自動的にキャラクタをチェンジするために使うようです) 第5パラメータはウインドウバッファIDです。 これも繰り返しですが上記で説明している、バッファと呼ばれる領域(表示されない裏の画面)または仮想画面(非表示のウィンドウ)のことで、下記のRPGのマップのような画像が入っている場所を示しています。 今回は1番を使っていましたね。 まとめると「1番の仮想画面に貼り付けた下記の画像のx座標128ドット、y座標0ドットの位置を基準にして、横幅64ドット、縦幅64ドットを切り抜いて、キャラクタ番号0番に登録する」という、とてつもなく長い意味になります。 わかります?

HSPプログラミング_スプライト準備01

11行目の「 gcel命令 」は操作したいウインドウIDを指示する命令です。 ここでは0を指定しているので「見える方の画面」つまり仮想画面ではなく、表示されて目に見える画面をこれから操作しますよ。という意味になります。

13行目の「 es_set命令 」は「キャラクタ番号とスプライト番号を紐づけてx座標とy座標に配置する」という意味の命令になります。 第1パラメータがスプライト番号、第2と第3パラメータがx座標とy座標です。 第4パラメータがキャラクタ番号となります。 ここで注意するのは「配置」しただけで「表示」はまだされません。 ホント難しいですね~

15行目の「 es_draw命令 」で、登録された全てのスプライトを描きなさい。という命令です。 今回は1つしかスプライトを登録していないので、1つだけ描かれます。 と言っても上記と同じ注意点が出てきます。 スプライトを描いていますが、まだ表示(見える状態)にはなっていません(汗) まだかよっ!(怒) はい。その気持、よ~くわかります。

17行目の「 redraw命令 」で1を指定することでやっと画面に表示(見える状態)にしれくれます。 

いやぁ~、ココまで長かったですね~ 説明するのも非常に大変でした。 しかも説明が本当にこれで良いのか不安だし。 ただとりあえずワタクシが調べて、色々試してみた結果、これがスプライトを表示するために必要な最低限のプログラムでした。

最後に実行してみましょう!

HSPプログラミング_スプライト表示02

いかがでしょうか? たぶん一度に理解するのは難しいと思いますから、頭を整理しながら、紙と鉛筆で絵を描いたりしながら理解を進めて行ってくださいね。 まぁとにかくスプライトが表示できてよかったぁ~