0_0_58A

 obake   specification   version 

機能の追加をする前にデバッグとコードの整理中

コードを整理していたら HTML5 で動作確認できなくなっていた。コードを破壊したのかと思い原因探し、セーブデータの保存と読み取りに異常があった。

ゲーム起動時とゲーム終了時にデータを自動で保存するロジックが組み込まれているため、ここを修正した時に不具合が生じたらしい。PC 版で動作確認すると問題ないが、HTML5 では動かない。

コードに互換性がないというより、HTML5 はウィンドウサイズに合わせてゲーム画面を動的に変更することができないため、ブラウザで起動した際にブラウザのウィンドウサイズに合わせてゲーム画面を縮小する場合、ルームのリスタートが必要になる。ここにプラットフォームの仕様差がある。PC 版にはそのルーチンが不要で、画面サイズを拡縮する場合この再起動部分をよく考慮して扱わなければいけない。

最終的に HTML5 とその他で実行されるコードを分割し、実行環境に応じた起動処理を選択できるようにした。これで問題解決。

  1. DetectOS_StartUP(); — ブラウザか否かを判定
  2. StartUP_Windows();( PC 及びモバイル全般のスタートアップ処理 )
  3. StartUP_HTML5();( ブラウザ用のスタートアップ処理 )
  4. → PC の場合
    • StartUP_Windows();
      1. Init_SaveData();( 共通化された処理 )
      2. Check_Screen_Aspects();
  5. → HTML5 の場合
    • StartUP_HTML5();
      1. Init_SaveData();( 共通化された処理 )
      2. Check_Screen_AspHTML5();

途中 Init_SaveData(); の処理だけは共通化されていて、データの保存形式は共通化されたものを使うことが保証される。

スタートアップ処理は HTML5 版の方が手続きを簡略化してあり、起動に時間が著しくかかった場合、アプリケーションの起動に失敗する。これは仕様。

PC 版はこの奇妙な仕様はなく、アプリケーションが異常終了した場合のチェックや再起動などデバッグ用処理も含まれる。

QF_Dororon 関数で新しく補充されるお化けのインスタンスを作成している。この処理を先へ進める。

追加したフラグ

ev.FuncButtSwitch = false;

画面下ファンクションボタンを押した時、イベントを実行するか否かを決定するフラグ。True の時は実行する、false の時は実行しない。

3-Match 判定後、お化けが新規追加された時には一時的にこのフラグが false 化される。その後再度 True 化するタイミングをよく考えないとバグる。

DoronLoop[6] = 0; を追加、ループ処理用のカウンタを一次元配列で格納。各カラムでどこからループをスタートするかを決定するための数値を保存している。

現状

仕様は少しづつ固まってきている。新しく補充したお化けを何時実体化するかなど、処理が決まれば速い。

グリッドAからグリッドBへ移動するロジックは実装。

OGrid_MoveDown 関数を追加、この関数はグリッドAから一時削除されたお化け達をグリッドAの Column 単位でもう一度ソートする処理。

instance_create(x,y, OGQues);で作成されたエフェクト用オブジェクトのインスタンスは、一定時間経過後に破壊される。破壊される直前、ObakeGoDownF フラグが ture になっている場合、グリッドAの Column 単位ソートを実行する。

グリッドBで如何なる操作があっても、グリッドAとBは完全に独立したタイミングでソートが実行されるので、処理が重複したり衝突したりといった矛盾は発生しない。

今後

QF_Dororon 関数は完成。OGrid_MoveDown も実装、あとは

m = (k + (((i << 2)+(i << 1)) + i)); DoronBitXY[m] = z; で ID 管理されているオブジェクト・インスタンスを本物のお化けと入れ替えて、DoronBitXY[m] 配列に false を入れて完成。




次へ

前へ