今日のグラディウスもどき(接触判定とフレームレートなど)

敵は最初「ハエ」で作ったが画面が美しくないので「鳥」にした。

f:id:karmen:20170910084623j:plain

しかし鳥はかわいいので撃つとかわいそう。

それでショットと敵の交差判定を書いて当たったら消すように。次は爆発のエフェクトをかけるため、爆発クラスを作るか鳥クラスに爆発フラグを持たせるか幾通りか考えるが、思いついたまま書くとどのみち後で書き直すことになる。

交差判定は四角と四角の交差なのでIF-ELSEとかAND-ORをたくさん書けば解決するが、いつも面倒だと思っていたが劇的に簡単な方法があった。

「距離の絶対値と幅(高さ)の半分の和を比較する」というもの。絶対値ABSは数学クラスを使うまでもなく簡単なプログラムでコード量も計算量も少ない。

あとはゲームを進行させて18ミリ秒待つというメインループ周りを書き直した。

まず現在時刻をミリ秒で保存して、ゲーム処理を行い、保存した時刻から16ミリ秒経過していたら次のゲーム処理にループする。最初18ミリだったのが16ミリになったのは最初に計算間違いというか感覚で作ったものだからで、処理系を変えたのは俺のマシンが速いので1ミリ秒以内に計算が終わって実行結果は変わらなく見えるが、遅いマシンで計算に15ミリ秒かかったとするとそこから16ミリ秒眠るとゲームが遅くなる。そこを新しい処理で計算前と計算後の時間を比較してフレームスキップするようにしたから、遅いマシンでも同じ体感時間でゲームが出来るようになったはず。

せっかくJavaで書いたので色々のマシンで遊べるように組んでおきたいと思って。