私はこの半分の週のように100%再現可能ではない奇妙なバグを得て、まだそれを理解することができません。うまくいけば、誰かが私に指示を与えることができます。JavaScriptのdouble forループで奇妙な2回実行
私はこのテトリスゲームを構築しています。実際に2次元アレイであるこの井戸のグリッドでは、テトロミノが一番下に落ちると(それは別のテロミノまたは井戸の境界に当たる)、井戸の格子に4つの正方形のブロックを含むグリッドを転送します。通常、それはうまく動作しますが、ゲームの後で、形状が正しく見えません。
そして、ここでコメントした関数である:ここでは
function transferTetroGridIntoWell({ grid, tetroGrid, tetroPosition, color }) {
let newGrid = [...grid]
let relativeX, relativeY
// the tetroGrid could be a 2d array like:
// [1,1,0]
// [1,1,0], in which 1 indicates a block, and 0 is none
for (let row = 0; row < tetroGrid.length; row++) {
for (let col = 0; col < tetroGrid[0].length; col++) {
if (!tetroGrid[row][col]) continue
// the index of the array relative to the well grid
relativeX = tetroPosition.x + col
relativeY = tetroPosition.y + row
// assign the color to the according square block in the well grid
newGrid[relativeY][relativeX] = color
}
}
return newGrid
}
は問題です:
テトロミノのそれぞれはわずか4正方形のブロックが含まれているため、newGrid[relativeY][relativeX] = color
はわずか4回実行する必要があり、そのデバッガでの表示から真です。しかし、時には、この割り当てが再び呼び出される前に2回実行されるように見えることもあります。実行前
:
実行後の1回目:ここで
がデバッグスクリーンショットである(そして奇妙なことが起こるところこれは、に挿入された2つの#f6d42b
があります井戸だけでなく、グリッド8でもグリッド7)
4回実行の6つの正方形ブロックが挿入されました。どのように起こることができますか?
完全なソースコード:本当にこの長い記事を読み終え誰のために感謝https://github.com/thomasyimgit/Tetris
!!