イベント連鎖時のタイマー制御
プロローグや第1章で登場するザコ敵
グリーンワームとブルーワーム。
こいつらは、自分の当たり判定である顔の中心付近から
半径260ドット以内にミクがいる、かつ、
前回の弾を発射してから3秒以上経過していると
次の弾を打ち出す動きをする。
ミクが初めて「魔法のネギ」をゲットするイベントを見ていくと
従来の初音ミク冒険記では、こんな動作をする。
「魔法のネギ」をゲット!
「魔法のネギ」をゲットしてから3秒以上待ってからメッセージ送りボタンを押すと
ブルーワームは、前述の条件を満たしているので、弾を発射している
順々にメッセージ送りしていって
攻撃スキル「ネギショット」を習得後、
今度はスキルメニューの説明に入るタイミングで
再び条件を満たし、ブルーワームは弾を発射しているので
ブルーワームの顔付近に弾が2つ表示されている
一通り操作説明が入った後、
三たび条件を満たし、ブルーワームは弾を発射しているので
ブルーワームの向いている方に弾が3つ発射されている
実は、アイテムゲット→ルカとの会話→操作説明の
「→」の段階で一時的に操作禁止状態が解除されている。
といっても、1フレームだけなんだけどね。
それでも、1フレーム挟まることで、画面が1度再描画されるため
いろいろと処理が実行されてしまうわけだ。
なんで1フレーム挟まるかというと
これは「描画順序」に関係がある。
初音ミク冒険記では、ゲーム本編で画面を表示するために
30以上の描画処理が行われる。
アイテムゲット→イベント開始の時には
アイテムゲットのメッセージを消去しないと
イベントのメッセージが表示できないため
もう一度描画処理を最初からやり直す必要がある。
このため、どうしても1フレーム挟まないとダメなのだ。
こういった事情から1フレーム挟まるんだが
前述のスクリーンショットの状況を改めて考えてみると、
ミクが弾を喰らう位置にいないから影響は無いんだけど
逆にミクが弾を喰らう位置にいた場合、
敵の弾を喰らったら、ミクの位置やマップ構成にもよるが
連続で被弾することになる。
実はこの問題、かなり前から確認されていたんだけど、ずぅっと放置されていました。
2012/02/12の記事
「初音ミク冒険記」、タイマー処理について考えてみる
に、こんなことがかいてあります。
イベントの開始/終了は数が多いし 2章を作るときにも イベント関連の見直しをしないといけないと思うので その時に対応しようと思う。
いやぁ、2年も先送りとか、かなり「やりすぎ」な感があるよね。
この問題、結構、処理順序が関係あって
これまでリファクタリングして処理の見通しは良くなった分
関数の呼び出し構造が複雑になってしまい
頻繁に使う「操作禁止フラグ」の設定箇所を処理の流れで追うのが難しくなっていた。
(該当するソース箇所は、Grepすれば一発なんだが)
実は、このところ、デバッグ機能を強化していたのは
この辺りの流れや、フラグの設定状況、
敵の持つタイマー情報を表示するために作っていたのだ。
デバッグ機能の強化に時間をかけたのは
今後も必要になってくる重要な機能と思ったので。
タイマー関連のバグは、PSP版の頃から結構あって、
現在、tracで管理している作業チケットにも解決済みを含め
6つのチケットが登録されている。
一応、この記事を書いている時点で
6つのチケット中4つまでの対応が終わっている。
今週末に残り2つも解決して
次に公開するバージョンで、気づいている限りのものは直し切りたい。
| 【固定リンク】 | 【コメント (0)】 | 【トラックバック (0)】
このエントリーへのリンク
トラックバック
この記事へのトラックバックの一覧です: イベント連鎖時のタイマー制御:
コメント
このブログの新着コメントをRSSリーダに登録する為のxml