0_0_43

 obake   specification   version 

Moving 動作に Reback 動作を加え往復の安全性を高めた

_43 にある現在わかっているバグについて

  • PickTileQuaA のサイズは 0
  • MvTargetCT = 2
  • SwapReColorQue = 0
  • SwapColorQue = 2

この状態で、 MvBricksPaiRFlag = True;

Swapが終わっても次キューに入っている移動色切り替えは終わっていないため延々キューが入った状態が継続される

3-Match判定があったとき、

  • MvTargetCT = 4
  • SwapColorQue = 4

この二つが一時的に 4 となっている時に 3-Match が成立してしまうと SwapReColor 関数が実行されてないエラー

TS_CK_Vanish(); 関数は TS_CK_Swap(); 関数から呼び出されていて、その直後の非関数処理部分に問題が多そう。

K_Vanish();
ds_grid_copy(Aval, MG);
    if (PickTileF==false){
        if (ds_queue_empty(PickTileQueA)==true){
        if (ds_queue_empty(PickTileQueB)==true){
        if (ds_queue_empty(SwapReColorQue)==true){
           PickTiID         = noone;
           SlideDir         = noone;
           PickTileF        = false;
           MvTargetCT       = 0;
           MvBricksPaiRFlag = false;
        };
        };
        };
    };
VanishFlag   = false;
TouchDisable = true;

上記ステートメントは、

  • MvTargetCT = 4
  • SwapColorQue = 4

この条件時には実行されていない

エラーステータスを解析中、QF_Movement へ処理が移ったが上手に処理されていない

	else{
	    if (MvTargetCT==0){
		ds_queue_clear(PickTileQueA);
		ds_queue_clear(PickTileQueB);
		PF_Check_IDandPos();
		MvBricksPaiRFlag = false;
	    }   
	    else{
		var d = ((c - MvTargetCT)>>1);
		//show_message("d = "+string(d));
		    /*repeat(d){
		        ds_queue_dequeue(a);
		        ds_queue_dequeue(b);
		    };*/                        
		ds_queue_copy(PickTileQueA, a); 
		ds_queue_copy(PickTileQueB, b); 
	    };  
	};  

処理を上記に変更。

  • ds_queue_dequeue(a);
  • ds_queue_dequeue(b);

この二つの処理を実行しないようにした。

上記条件は、3-Matchがあったときに、まだ他の移動色タイルがあった時の動作を定義したものだが ここで dequeueしたため他の数値と数が合わなくなり整合性を失っていた

しかし更に問題点発生:::

3-Match が無かった時の処理にエラーが発生するようになった

調べてみたら、Swap処理で連続処理が発生している時は

            /*repeat(d){
                ds_queue_dequeue(a);
                ds_queue_dequeue(b);
            };*/

この処理が利用されていた。ということは 3-Match判定があった時だけこの処理をしないようにするべきだったか

else{
    if(VanishFlag==false){
        var d = ((c - MvTargetCT)>>1);
        //show_message("d = "+string(d));
            repeat(d){
                ds_queue_dequeue(a);
                ds_queue_dequeue(b);
            };                        
        ds_queue_copy(PickTileQueA, a);
        ds_queue_copy(PickTileQueB, b);
    }
    else{
        ds_queue_copy(PickTileQueA, a);
        ds_queue_copy(PickTileQueB, b);
    };
};

これで3-Match判定が無かった時の連続処理も直せた。

負荷を与えながらテストもパス、しかし3連続でタイル入れ替えを高速操作したら FATAL ERROR 発生 TS_CK_Vanish に問題が出ている。




次へ

前へ