1週間ほどサボってました(;^_^A
ぼちぼち勉強を再開して行こうと思うのですが…
その前に2048をアプリにして操作した時の
問題点を書こうと思います。
操作や得点には問題も無く、無事にゲームが出来ているのですが、
あるタイミングでフリックやタップをするとバグが出ます。
実は、ピース生成の際に少し問題があります。

ピース移動中のフリックをキャンセルする為、
GameManager側でbool型変数のcreateを使用しています。
この変数をfalseにするタイミングが微妙な為、
バグが発生しております。(ノ_<。)うっうっうっ
GameManager
//空きマスからランダムに2カ所を選ぶ
public void SelectPosition()
{
List list = new List(); //空きマスを取得する変数
int num = 2; //ピースの生成回数
int rot = 0; //ピースの生成カウント
int limit=0; //空マスのカウント
for(int i = 0; i < 16; i++)
{
if (Flag[i] == false)
{
list.Add(i);
limit++;
}
}
//空きマスが一つならnumを修正する
if (list.Count == 1)
{
num = list.Count;
}
//ピースをnum回生成する
while (rot < num)
{
int pos = list.GetAndRemoveAtRandom();
int x = pos % frame;
int y = pos / frame;
CreatePiece(x, y, 0,false);
rot++;
}
//スコアの表示
scoreText.text = "SCORE:"+SCORE.ToString();
HiscoreText.text = "HI-SCORE:" + HI_SCORE.ToString();
//空マスが2つ以下なら移動できるか判定する
if (limit<=2)
{
StartCoroutine("waitJudge");
}
create = false;
}
while (rot < num)でピースを生成するCreatePieceメソッドを呼び出しています。
ここで呼び出してピースを生成してる間にcreateがfalseになります。
簡単に言えば、ピースを生成中にフリック入力が出来る状態になります。
なので、ピース生成中にタップやフリックを行うとバグります。
実は、スクリプトを組んでる時から気が付いていたのですが、
秒数で言えば0.05秒前後の事なんで大丈夫かな~
なんて思っていました。
アプリにビルドして操作をしていると
何気にフリック後に指が触れたりしてバグが出始めました。
0.05秒ほどの隙間ですが、思ったより影響します。
因みにバグるとポジションが読み込めない為、
ピースが止まったりピース自体が消えたり、酷い時には
ピースの衝突を受けて、ピースが無限生成される事もあります。
PCで確認作業中にバグった後、無理やり操作し続けると
PCがフリーズしました。
スマホでは危険なので試してませんが…
この部分の修正が出来ないと、とても表に出せないシロモノとなります。
修正案は
・ピースの生成後にcreateをfalseにする
・ピースの生成が終わるまでウェイトを掛ける
になりそうです。
ただ、
・ピースの生成は2度行われる
・衝突からもピース生成が行われる
なので、CreatePieceメソッド内でcreateをfalseに出来ません。
やはりウェイトを掛ける処理が妥当かと思います。
この辺りが修正できれば、ハレて表に出せる物になりそうです。
この記事へのコメント