#タイトル発表
タイトルが決定したので発表します。
タイトルは
「ラクガキしーけんす!」
です。らくがきっぽいキャラクターが連なっているイメージからのネーミングです。
#画像大革命
画像を 全て 差し替えました。
描いてくれたのはまいしすたーです。
提出一週間前に頼んだのにありがたい限り。><
モノクロでらくがきっぽい感じをテーマにしています。
#移動方法改造
移動方法をかえました。
以前から、動作が安定せず、ピッタリの位置でこどもがついてきてくれないことがありました。
試行錯誤の結果、おそらくあまりに重い処理をいれると、処理落ちか何かでずれてしまうことがあることがわかりました。
初期仕様では、キューに進行角度を入れ、次の要素に渡していたのですが、
新使用では、処理落ちなどがあってもズレが生じないように、座標を直接キューで管理することにしました。
この方法では、8フレーム前のひとつ前の要素の「位置」に次の要素が移動するようになります。
ただし、方向によって画像の表示を変化させるために、
進行角度のキューは維持します。
#ゲームオーバー画面
ゲーム画面と、リザルト画面のあいだに挟むゲームオーバー画面を追加実装しました。
技術的には新しいことはしていません。
カウントダウン画面の応用です。
試しに動かしてみたら思ったよりもいい動きをして良かったです。
#キャラクター表示調整
画像の変更に伴いキャラクター表示の調整を行いました。
ひとつまえの段階ではキャラクター表示は8方向だったのですが、
4方向に変更しました。
また、方向数を減らしたかわりに、走っているような動きをするようになりました。
これは、右足が前の画像と、左足が前の画像を用意し、順番に表示することで作成しています。
また、成長段階にも変更があり、6段階になりました。
#大人キャラクターについて
大人キャラクターの表示を大きく変更しました。
大人キャラクターとは成長の最終段階のキャラクターのことです。
前段階では、キャラクターは全て一律おなじ見た目をしていました。
今回の実装でキャラクターの見た目にバリエーションをつけました。
全部で 648通り です。
これは、あらかじめ体、アクセサリー、メガネ、髪、表情、目のそれぞれに分けて素材を作成してもらい、
プログラム中で乱数を使用して動的に合成し、新キャラクターシートを作成することで実現しています。
画像の合成にはSurfaceクラスを使用します。
Surfaceクラスにはdrawという関数が用意されていて、
この関数に画像を与えることで、Surfaceにその画像を描くことができます。
この関数は繰り返し使用することで、既に描かれている絵の上にさらに画像を描いてくれます。
この関数を使用して、正しい順番に画像を重ね合わせることで、
Surfaceの内部に一枚のキャラクターシートが完成します。
SurfaceはSpriteのimageとして使用できるため、
このSurfaceをキャラクターに渡します。
#ステータス画面仕様大幅変更
ステータス画面は以前はクッキーが落ちてきてストックされていき成長した時点でしたに落ちていくという仕様でした。
今回の変更で、このあたりのエフェクトが変化しています。
##たまご
たまご型のエネルギーゲージのようなものを実装しました。
お菓子をたべるとエネルギーゲージのゲージが上昇します。
成長した時点でエネルギーゲージは最低値まで減少し、ふたたび上昇を開始します。
###うごく
このゲージは一定周期で左右に揺れます。
これは、5枚の絵を使用してパラパラ漫画を作成しています。
###ゲージ
ゲージは、枠と、内容液の二つの画像から構成されます。
枠はゲージの部分だけ透明になっています。
この透明部から内容液の画像を覗かせます。
内容液の画像には水面を描き、
内容液の画像が上下に移動することで、エネルギーの増減を表します。
##お菓子吸収
お菓子が内容液に沈んだ時点で消えるようにしました。
もとのコードの大幅な変更を防ぐために、
もとの移動アルゴリズムはできるだけ活かす方針で実装を行いました。
これは、お菓子のy座標を監視し、毎フレーム水面の座標を比較することで実装しています。
##エフェクト
お菓子が消えるときに、きらきらのエフェクトが発生するようにしました。
このエフェクトは、クラス定義しました。
コンストラクタを呼び出すだけで、エフェクトが発生し、その後自動でシーンから消去されるようにしました。
この仕様によってエフェクトを変数によって管理する必要がなくなります。
#ポーズ画面にアニメーション
ポーズ画面にアニメーションを追加しました。
こちらに関しても、カウントダウン画面の応用です。
#スタート方法
スタート画面からの遷移をスペースによって行うようにしました。
スペースをボタンとして認識させるには、
スペースをボタンとして登録する必要があります。
その後、ボタンのイベントリスナーとして動作を定義します。
登録は次のように行います。
game.keybind(32,"space");
#エフェクト
敵に攻撃されたときと、敵に攻撃した時にエフェクトを表示するようにしました。
このエフェクトはお菓子の消えるエフェクトのアルゴリズムと同様のアルゴリズムを使用しています。
しかし、こちらのエフェクトでは、
コンストラクタ使用時に指定する座標を中心とした円状にエフェクトが発生するようにしています。
これは、中心からの距離と角度を乱数によって指定し、
得られた値によって表示する場所を変更することで実現しています。
エフェクトは発生後、徐々に大きくなりつつ、透明度を高くし、
完全に消えた時点でシーンから削除します。
#完成品
ゲームのページにジャンプします。
操作方法は移動後のページをご参照ください。
#ソースコード
GItHubで確認することができます。