プログラミング初心者のゲーム創作過程の記録です。ソースも載せるかも…
×
[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。
ラベル型変数って変わった機能がHSPの3には実装されてるみたいです。
それを使えば敵を移動させるとき
って思ってラベル型を使って敵移動関数を作りました。
本当言うと if 文で同じことが一行で出来たと思うんだけど、
何かこっちの方が直感的じゃないかと思ってラベル型で書いてます。
それを使えば敵を移動させるとき
gosub enemyAction(i, enemyStatus(i, ENEMY_ACT_COL))みたいにすれば敵の種類それぞれに関数を作らないで一般化させて扱える!!
って思ってラベル型を使って敵移動関数を作りました。
本当言うと if 文で同じことが一行で出来たと思うんだけど、
何かこっちの方が直感的じゃないかと思ってラベル型で書いてます。
それでさっきのラベル型配列で飛ぶ先がこっち。
;--------------------LINE------------------
*move_line//等速直線運動又は停止
//直線移動
es_apos enemyStatus(i, ENEMY_SPR_COL), enemyStatus(i, ENEMY_VX_COL), enemyStatus(i, ENEMY_VY_COL), 1
return
;--------------------CURVE------------------
*move_curve//等加速度運動
//速度計算
enemyStatus(i, ENEMY_VX_COL) += enemyStatus(i, ENEMY_AX_COL)
enemyStatus(i, ENEMY_VY_COL) += enemyStatus(i, ENEMY_AY_COL)
//移動
es_apos enemyStatus(i, ENEMY_SPR_COL), enemyStatus(i, ENEMY_VX_COL), enemyStatus(i, ENEMY_VY_COL), 1
return
;--------------------CIRCLE------------------
*move_circle//円又は楕円運動
//(ENEMY_VX_COL, ENEMY_VY_COL), (ENEMY_AX_COL, ENEMY_AY_COL) = 比(縦, 横), 角(現在, 回転)
//(1, 1), (0, 1) = 半径55
//(a, b), (0, c) = 55*a*b/c
//速度計算
es_sin s, enemyStatus(i, ENEMY_AX_COL) : es_cos c, enemyStatus(i, ENEMY_AX_COL)
//移動
es_apos enemyStatus(i, ENEMY_SPR_COL), enemyStatus(i, ENEMY_VX_COL) * s / 1024, enemyStatus(i, ENEMY_VY_COL) * c / 1024, 1
//回転角計算
enemyStatus(i, ENEMY_AX_COL) = (enemyStatus(i, ENEMY_AX_COL) + enemyStatus(i, ENEMY_AY_COL)) \ ANG_MAX
return
それぞれ引数の組み合わせで好きなように出来ますし、一応一キャラにつき移動方法は5つまで記憶でき、最後まで移動すると最初に戻ってループするようになってます。
3つでもいいかなって思うんですが、とりあえず5つで。
それで円運動は es_dir を使うと移動方向が角度指定で簡単に円運動は可能なんですが、楕円運動も一緒の関数で処理してしまおうと考えて上のようになりました。
なんでこんなに一般化してプログラムしてるのかは次に計画してることでようやく威力を発揮すると思ってるんですけど……そっちのプログラムは未だに完成しないんよ……;
PR
Comment