前提・実現したいこと
Unityを勉強するためテトリスのようなものを作っているですが、for文がなぜか動作せず困っています。
安易に人様の時間を奪うのは好きではありませんが、3日ほど調べても分からないのでお力をお貸しください。
問題が発生している箇所は、テトリスでは画面上から落ちてくるブロックの集まりのことを「ミノ」といいますが、
このミノが落下またはキー入力による移動する際に、移動先のスペースが空白であるか(外壁または硬化したミノが占有していないか)を判定するための関数です。
ソースコードは長いので問題部分(と思われる)を抜粋します。必要であれば全て掲載いたします。
コードをご覧いただけるとすぐに露見しますがど素人です。
初めての質問で情報不足なところがあるかと思いますが、それを含めて指摘していただけると幸いです。
発生している問題・エラーメッセージ
for文がなぜか動作していません。動作しない原因がわからず困っています。
エラーメッセージは特に発生していません。
該当のソースコード
C#
1 void CanMove(int moveDirection) 2 { 3 // 落下中のミノが左、右、下に移動できるかを判定します。ミノ配列内の実ブロックの左、右、下に位置するpool[]が、空きスペースであるかを判定します。 4 Debug.Log("CanMove()内でのログ①。CanMove()が呼び出されました。"); 5 6 int blockRow; // mino[]内の実ブロックがある行数 7 int blockColOffset; // mino[]内の実ブロックの列オフセット 8 int blockIndex; // 実ブロックのpool[]上での位置(要素番号) 9 int srcCounter; // srcMino[]の何番目の要素を処理しているかを保持しておくカウンター 10 11 srcCounter = (int)srcMino.Length - 1; 12 Debug.Log("CanMove()内でのログ②。srcCounter:" + srcCounter); 13 14 srcMino = IdentifyMinoArray(minoType, minoDirection); // minoTypeとminoDirectionを元に表示するミノの形を特定します。ミノが新しく変わるときに初期化する必要あり 15 Debug.Log("CanMove()内でのログ③。(int)srcMino.Length:" + (int)srcMino.Length); 16 17 for (int i = srcCounter; i == 0; i--) // ⬅︎ここが問題点。for文が動作していない 18 { 19 // ⬇︎mino[]の中から実ブロック(0以外の値)が格納されている要素番号を特定します。 20 Debug.Log("CanMove()内でのログ④。srcMino[i]]:" + srcMino[srcCounter]); 21 if (srcMino[srcCounter] != 0) 22 { 23 // ⬇︎0以外が格納されている要素番号と配列長を元に、mino[]内で0以外の値が格納されている列と行オフセットを特定します。 24 blockRow = srcCounter / (int)Math.Sqrt(srcMino.Length); 25 blockColOffset = srcCounter % (int)Math.Sqrt(srcMino.Length); 26 27 Debug.Log("CanMove()内でのログ。blockRow:" + blockRow); 28 Debug.Log("CanMove()内でのログ。blockColOffset:" + blockColOffset);
試したこと
コード内のあちこちにDebug.Log()を用いて動作を確認したところ、for文が動作していないことがわかりました。
補足情報(FW/ツールのバージョンなど)
Unity2018.4.9f1
ここにより詳細な情報を記載してください。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/03/06 13:05
2020/03/06 13:07
2020/03/06 13:15
2020/03/06 13:30
2020/03/06 13:59