標準スプライトの学習を兼ねて作ったのが、あれっぽいあれwだったのは、「シューティングゲームっぽい何か」を作るアイデアが浮かんだからだった。
アイデアの大筋から、細かな仕様を固めて作る前に、シューティングゲームの基礎である、自機の移動と自弾の発射処理を作ることにした。
移動処理自体はすでに作っているので、自弾の発射処理を作っていく。
オーソドックスな作りなら、スペースキーをショットキーにするのだが、3つ以上のキー同時押しに対応できないことが多いので、Zキーをショットキーにした。
で、JStickであれば、ボタン1が同時に検出できて好都合。
だけど、動作確認に使っているメガドラミニの6BPADは、ちょっと変態さんな並びのようで、Yボタンがボタン1になる。
「PAD設定さん」では、そのあたりをコンフィグできるのだが、まだあとで対応する。
とりあえず、Aボタンがボタン3なので、ボタン1と3をショットキーになるようにした。この副産物として、Cキーもショットキーになった。
弾は画面外に出たら勝手に消えてくれるように、便利な命令es_areaで、画面サイズの座標値を指定した。
ショットキーを押したら、自弾を処理するサブルーチンに飛ばす。es_exnewでスプライトの空きを調べて、空いてたらスプライトのセット、タイプ番号の設定、そして、es_adirで、自動的に移動するようにした。
#include "hsp3dish.as" #include "m_joystick.hsp" screen 0,800,600,0 title "シューティングっぽい何か(仮称)" es_ini ;スプライト初期化 buffer 2 picload "bg.png" ;仮背景画像 buffer 3 ;バッファを作成 picload "player.png" ;自機画像を読み込み es_size 64,64,1 ;パターンサイズ、ヒット領域1%で es_pat 0,0,0 ;パターンを読み込み buffer 4 ;バッファを作成 picload "shot.png" ;ショット画像を読み込み es_size 64,64,20 es_pat 1,0,0 gsel 0 ;操作バッファを0に戻す px=300:py=200 ;自機のXY座標 es_set 0,px,py,0,0,1 ;自機のスプライトをセット gamecnt=0 es_area 0,0,800,600 ;スプライトの領域設定 moveangle=2 ;自機の弾の方向 *main redraw 0 sht=0 ;ショットボタンフラグ JStick key,1+2+4+8 if key&1 : px=px-5 : ix=0 ;カーソル左 if key&4 : px=px+5 : ix=2 ;カーソル右 if key&2 : py=py-5 : iy=0 ;カーソル上 if key&8 : py=py+5 : iy=2;カーソル下 if (key&2048) or (key&8192) : sht=1 ;ボタンZ、Cとボタン1、ボタン3(6BパッドのA) px=limit(px,0,800-64) py=limit(py,0,600-64) if key&128 : end ;ESCでゲーム終了(暫定) pos 0,0 gcopy 2,0,0,800,600 ;背景画像のコピー color 255,0,0:gmode 2 gamecnt++ es_pos 0,px,py ;自機スプライトの位置変更 gosub *shoot ;自弾の発射 es_draw redraw 1 await 1000/60 goto *main *shoot if sht=1 { es_exnew snum,100,101,1 ;ショットは画面内に最大2発 if snum>0 { ;ショットの空きがあれば es_set snum,px,py,1 es_type snum,2 ;弾はタイプ2 es_adir snum,2*8,1000 ;方向はとりあえず前方。 } } return
そして、これを動かしてみたのがこれ。うん。雰囲気は出てくるね。
youtu.be
自機のグラフィックがダサいのは、ご愛敬ということでw
これからもう少しマシに見えるように頑張って描いて行くつもり。