【Unity】2048をスマホで試してみた

2048を作ってみて、少し頭がパンクぎみで
1週間ほどサボってました(;^_^A

ぼちぼち勉強を再開して行こうと思うのですが…

その前に2048をアプリにして操作した時の
問題点を書こうと思います。

操作や得点には問題も無く、無事にゲームが出来ているのですが、
あるタイミングでフリックやタップをするとバグが出ます。

実は、ピース生成の際に少し問題があります。

2048㉟.jpg
ピース移動中のフリックをキャンセルする為、
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に出来ません。
やはりウェイトを掛ける処理が妥当かと思います。

この辺りが修正できれば、ハレて表に出せる物になりそうです。


この記事へのコメント