進捗 ゲームシステム編 #04
0070 完結編
機能は順調に追加され無事に次回から内部バージョンを上げ 0071 となる。
メッセージシステムとゲームエンジンの中継機能としてブリッジが実装され、どちらか一方を動かす場合は片方を完全に停止させる。同じタイミングでこの二つが機能として動かないよう調整する機能が「ブリッジ」の働きとなる。
ゲームエンジンの方は一時停止機能を実装したので、次にメッセージシステム側を一時停止する機能にとりかかる。その前に、メッセージシステムの未実装部分を先に実装する必要がある。
システムインターフェース部分
メッセージを停止/ゲームを停止するためのユーザインターフェースとしてボタンメニューを作成。
ボタンメニューを管理する msgSyStem というオブジェクトがユーザの操作を検出してメニューの開閉及びメニュー後の動作などを決定する。
あまり難しい処理ではないため簡潔にスクリプトを書く。
コードの整理整頓
古いコード部分を含め相当な量のスクリプトを書いた気がするけれど、全体像がいまいちわからない。把握しにくい。
MMF2 とか CF25 だとフロー型なので上から下へイベントを並べていくから必然的にどれくらい動作を作ったのかがイベントエディタの行数から把握できる。
GMS だと作りこめば必然的にオブジェクトに対するスクリプト( ユーザ定義関数 ) の量が多くなるのだけど、スクリプトはリソースツリー上で見ても分散しているため、全体でどの程度コードを書いたのかは把握しにくい。
整理が必要と判断、すこしコードをインデント揃えたり記述の無駄を省いたり記述の統一をしたり、地味な作業に没頭。
動いているものが動かなくなる不安
コードを整理していくと不要なユーザ定義関数を削除したりリネームしたり、この作業は単純ミスが怖い。実際に何回かミスってエラー吐いて落ちてを繰り返した。
しかしこの動いているものが動かなくなる不安を億劫に感じたり怖がっていると、完成度は上がらない。ここは壊してやる位の気持ちで挑む方が良いみたい。
コードの整理整頓完了
色々削ったり足したりして旧バージョンとの互換性が一部無くなったところで、無事に内部バージョンを上げる。
メッセージシステムの改修
メッセージシステムで扱うオブジェクトやメッセージの表示位置指定などを大幅に刷新。
これまでは暫定的にだがスクリーンの位置をピクセル単位で直接指定したが、今回修正で原点からの距離を割合で示した符号付き数値を用いる。
メッセージシステムの原点はスクリーンの中央と定め、そこからスクリーンの上下左右端までの距離を-100 〜 +100 % とする。
ピクセル単位での指定はある意味直感的だが、スクリーン上のレイアウトを変更する場合に困る。数値の決め打ちでスクリーン上の座標を直接指定しているからこの問題が起こるわけで、ならば原点からの距離を割合で求める方法ならこの問題に対する解決策となりえる。
大まかな位置はテンプレートを作ってそれを見ながらの配置もできるし、スクリーン上の座標を求める専用アプリを作る予定もある。
しかし実際にテンプレをゲームスクリーン上のメッセージとして配置・出力した分布を見ると、メッセージを出現させる位置なんてピクセル単位での精度なんか必要ないと分かる。こんなもん大まかでいい。細かく指定したい場合でも計算で簡単に求めることはできるし。
キャラクタやメッセージ表示用の吹き出しは左上に原点が設定されている。画面中央に原点が設定されているメッセージシステム本体とはこの部分が異なる。最初キャラクタも原点は中央にすることを検討したが、すでに吹き出しが左上に原点は設定されていて、これを中央に揃えるのは表現の仕様上良くない。吹き出しが左上に原点を定めるのならばキャラクタもそれに合わせる。
こうしてキャラクタと吹き出しはそれぞれ共通して原点が左上に定められた。
その他
(Scripts) :–: (GameEngine) :–: (Puzzle_Detecter) +–+ Phy_Control +–+ Phy_CK_3Match
ユーザ定義関数を見ていたら処理がおかしい部分を発見。repeat の中で break が使ってあるけど指定回数 repeat する前に無条件 break したら repeat の意味が無い。
最終的に動作チェックしてから break は削除した。repeat を回数指定しているのにループ途中で処理が終わっているのは完全におかしい。縦と横をチェックすべきところがなぜか縦だけチェックしてループから抜けている状態だった。しかしこれまで問題が起こってなかったというのもなんか腑に落ちない。
なにか見落としがありそうなので今後デバッグするときなど、この点にも留意しておく。
次へ
前へ