ひとりごと

ゲーム画面に戻る
v0.04

「キャラクタのイメージを全て読み込んでからゲームが始まるようにする」

これの対応にかなり苦しめられた。
JAVAのイメージ読み込み処理は特殊で、イメージファイル読み込み関数 (AppletクラスのgetImage()メソッド)は、関数実行時にイメージを 読み込むのではなく、その後初めて描画するときに読み込み始められる。 すなわち、最初の描画時には読み込みかけで、イメージの一部分しか表示されないし、 複数のイメージでアニメーションをしてたりすると、チラツく。

で、アプレットの開始時にイメージを読み込み始めて、 全部読み終わるまでメインループへは行かないようにするために MediaTrackerオブジェクトというものがある。(ほとんどのJAVA本に載ってる)
だがこのプログラムを作り始めたころはMediaTrackerの使い方が よくわかんないで後回しにしてたら、いざ対応というときに クラスの大改造を迫られることになってしまった...。
(変更に弱いクラスの設計だったんだな。オブジェクト指向プログラミングは 久しぶりだったし...。今度デザインパターンの勉強をしよう。)

もう、改造中もバグるバグる。 キャラのイメージをSpriteオブジェクトのstatic変数で管理するようにしたら、 その継承クラスの自機と自弾と敵がみんな同じイメージになっちゃったり。 ああ、継承クラスごとにイメージのstatic変数があるわけじゃないのね。 みんな同じ変数を見てしまってみんな同じイメージになっちゃったのね。 設計失敗。

なんでImageManagerオブジェクトを作って、イメージを集中管理するように変更。

ついでにゲームのメインループ側を行っていた自機のパターン変更を、 自機オブジェクトの中で行うように変更。自機のアニメーションなんだから、 自機オブジェクトが自律的に行うべきだから。

さて現状気になってるけどまだ対応していないのが一点。
今、キー入力って、メインループがKeyInputクラスを使って 押下状態を調べて、自機の座標増減を行ってるのよね。 クラスを新しく作って、メインループから自機の座標計算を取り除きたい。 メインループから見たら自機は自律的に動いているように見えるようにしたい と思う。


v0.03

Zボタンを押すときと放したときのSHIFT押下状態の違いで、 別のキーコードになってしまい、Zを放していないと勘違いして ショットを撃ちっぱなしになるバグを修正した。

しかしその後、テンキーでも同じことが起こることに気づいた。
Zキーの対応の時は、プログラムの中のキー入力クラスにUpperCaseモード というものを増やして、入力を全て大文字に変換して処理することで 対応した。

テンキーはどうしよう。このネーミングだと合わないな。 別のモードを増やすことにしよう。でもまだSHIFT+テンキーの キーコードを調べていない。

面倒くさいし、あまり起こらないだろうと 決め付けて、そのうち対応、と先送りにする。


ゲーム画面に戻る