0_0_53A

 obake   specification   version 

_53 から仕様少しを変更して _53A で実装された落下処理

安定性評価を先に優先

バグが無いことを期待したがやはり大きなバグを発見。ゲームボード上でコンボを決めた場合に、上から下へ向けて連鎖をつなげるとFATALエラーが出る。もうすこし詰めたほうが良い。

というわけで、_53A はデバッグを優先、上から落ちてくる処理も仕様を考える。

落下処理の不具合について

ゲームボード上における上方で連鎖を完成させ、次に素早い操作で下方にあるタイルを連鎖させコンボを作る。すると上のタイルは先に落下体制に入り、そこからはタイミング次第ではあるが、すぐに下のタイルも連鎖完成するため、落下体制を作る処理が二重化されてしまう。これまでは下から上へという順番でのみ連鎖を考えていたため、その逆を行う操作について考慮してなかった。

0_0_53A_Bug03

0_0_53A_Bug06

この不具合を直さなければならないが、どう直すかしばらく分からなかった。別作業をこなしながら解決策を考えていく。

Phy_Control() の処理をどうするかが問題。

  1. スワップによって連鎖が発生する
  2. 連鎖確定後、連鎖したタイルを消去するまでの遅延処理
  3. 遅延処理後、速やかに落下処理へ移る
    • PHeight = (d - TY); → ( Phy_WaiTinG()で PEnTimer = (b + (k * PHeight)); )
    • DownWell = true;
    • PWaTimer = (timeline_position + (room_speed>>1)); → ( 遅延処理 )
    • ds_list_add(Phy_StandLiST , id); → ( ID を保存 )

まず ds_list_add に ID が重複することを避けなければならない。よって if 処理で分岐を付ける

バグ修正完了

上記ロジックの見直しで一応直った。主に ds_list_add の部分から重複を除くことで修正出来たと思う。 ただしタイミング次第では極めて稀だが移動の見た目に不具合が生じる時がある。このため、上方から落下中に下方でコンボを決めた場合には、再度落下のための遅延処理を計算し直すか、すでに落下中のオブジェクトに対しては落下を一時的に停止する重力キャンセルという仕様を組み込んだ。

重力キャンセルは上から下へ向けてコンボを決めた際には発生しやすいが、タイミング次第なのであまり多くは発生しない。そして重力キャンセラーが発生した場合は、スワップキャンセルと同じくオブジェクト後方に視覚効果を付けることにした。見栄えはこれでだいぶよいしごまかしが効いている。

連鎖判定の追加を

_53A の完成度を見て、今後は _54 に新機能を実装していく。

特に急ぐ処理として落下処理終了後の連鎖判定機能。

一度仕様を考えてみたが、どうしてももう一度フルスクラッチで判定処理を作る必要がある。というのは、既存の判定処理は処理を効率的に行うために限られた範囲のみ連鎖を判定するようになっていて、全てのタイルを対象にした総当り的な連鎖判定処理になっていない。

ゲームボード内で落下してきたオブジェクトに対する連鎖判定はコンボ処理とも関連が深いため、これを先に実装してから次にゲームボード外からのオブジェクトの補充処理を考えたほうが良さそう。

追加した関数

  • ( Phy_Control() )
    • PK_Set_WTimer(id, indexA, indexB, m);
    • Phy_Ck_Chain()
    • Phy_CK_3Match()

TS_Ck_Chain() をベースにした関数、落下後の判定処理をこなす、また判定かよという気はする。

作り直しを含めると処理の細かい違いもあるため4回くらい判定処理作ったような。

ゲームボード上の空白を埋めるために画面上部から落ちてくるタマの扱いを先に作ったほうが良いかもしれないが実際の製作順はまだあいまいのまま。

上から降ってくるボードの埋め立てをどのように処理するか、きちんと検討していない。




次へ

前へ