日記(915)

<前 次>

縦移動は大変だった

今日はちょっとナマライザに細かい新機能をつけました。
それが、フィルタの並べ替え。
フィルタ条件が多くなってくると見通しが悪くなるので、並べ替えたり整頓したりして見通しを良くしようということです。
あとは、どんなデータがやってきても例外を出さない安全なクリップボードを作って、解析中にエラーで中断されないようにしました。

今日のメテオスもどきは、縦移動を作りました。
昨日の段階で横移動と同じではうまくいかないということはわかっていたのですが、想像していた以上にてこずりました。
しかも、やっと縦移動できるようになった今現在の状況でも、縦移動した後すぐに横移動、そしてその逆もできない状況なので、その点の改善が必要になりそうです。

マルチスレッドを甘く見てました

とりあえずメテオスもどきは横移動から作り始めたわけですが、思うようにマウス入力を受け付けてくれなくて困りました。
ダブルクリックと認識されるからマウスダウンイベントが来ないのかと疑って色々調べてみたところ、原因は入力状態の更新の直前で入力が来て、更新前の情報を使う前提のメソッドが正常動作しなかったのが原因でした。
マルチスレッドではこういったタイミングの悪さによる誤動作が起こりうるので十分気をつけていたつもりだったのですが、肝心なところを見落としていたようですね。
あと、動作速度一定化の方法を、一定FPSを保つ方式から、変動FPSで可能な最大の速度を出すようにしました。
ただ、それでゲームに不公平が出てはいけないので、内部的な動作は一定FPSの動作を再現して、描画だけを実際に変動FPSにしています。

新しいメテオのデザイン

メテオスもどき、今まではディジェの絵を使っていましたが、そろそろ画面の構成もつかめてきたので絵をオリジナルのものに差し替えることにしました。
背景は画面構成を示す枠のみ、メテオはデフォルトの一番基本的なデザインのものを30x30のドット絵に起こしなおしています。
プログラムのほうも色々やりたかったんですが今日はあまりできませんでした。
一応パラメータにどんなものがあるかを調べたりメテオの現れ方、消え方なども調べたりしたんですけどね。

初期メテオ

メテオスもどき、メテオ降下割合を実装して初期メテオを配置するところまでできました。
もちろん初期点火防止措置もきっちりできていますよ。
プログラミングコーナーに書いてあるランダムセレクトのアルゴリズムが役に立ちました。
そしてこれで初めて気付いたのが、どの惑星にも、割合はどうあれ必ず5種類以上のメテオが降らなければいけないこと。
なぜかというと、燃えカスが還元した瞬間まわり4方向に繋がる可能性があるため、4方向が全て異なる種類でリーチであったとしても置けるメテオがあるように、5種類目のメテオが必要というわけなのです。
画面の比率とかはメテオスオンラインのをそのまま使っています。
今度はメテオをドラッグでずらす処理とシュートを作る予定です。
カタマリが絡んでややこしい点火関連は後回し…。

惑星パラメータ

で、惑星パラメータ設定画面がいつでも作れるような状態、すなわち、骨組みができていつでも設定するパラメータを増やすことができる状態にまで持ってくることができました。
で、手っ取り早く惑星列幅と高さと降下割合を実装して、画面を出してみました。
それに伴って、惑星パラメータを色々調べたりもしています。
ひそレポに書いてあったのよりやっぱりパラメータはかなり多いですね。

キー&マウス入力処理

メテオスもどき、リソースを読み込んで表示するところまでできたので、今日はキー&マウス入力処理を作りました。
Javaには現在のキー&マウスの状態を直接的に得る方法はないので、イベントを拾ってそれで状態を検出しています。
このあたりは昔VisualBasicでAPIに頼らずゲームを作っていた頃の知識を使っています。

メディアトラッカー

メテオスもどき、効率の良いリソースの読み込みを考え中なのです。
ロード時間を体感的にゼロにしたいんですよね。
なので、最初に画像を必要としない画面を表示して、その裏で別スレッドでMediaTrackerを動かして読み込むことにしました。
あと、メインスレッドの動作をアプレットのクラスに組み込んで全体をすっきりさせたり、後々に響きそうな部分の最適化とかをしていました。

<前 次>