1 回答
TA贡献1809条经验 获得超8个赞
您首先将旋转位置定义为 BasicBlocks 数组。这是对构成旋转位置的每个基本块的引用数组。
当您执行 block.moveLeft() 时,您将 x 值更改为与原始值不同的数字。这意味着保存在每个位置数组中的对象已更改为具有新的 x 值,因此当您尝试旋转时,这些位置不再有意义。
例子:
看看 tetrominoS。它的第一个位置是
tetrominoS[0] = [tetro[0], tetro[4], tetro[5], tetro[9]] // the position you first defined
在记忆中:
tetro[0]
= 参考BasicBlock (x = 4, y = 0)
tetro[4]
= 参考BasicBlock (x = 4, y = 1)
tetro[5]
= 参考BasicBlock (x = 5, y = 1)
tetro[9]
= 参考BasicBlock (x = 5, y = 2)
然后你做: moveLeft() (例如)
向左移动将所有x
值更改为x-1
您正在执行的操作
BasicBlock (x = 4, y = 0).x--;
tetro[0]
现在指向BasicBlock (x = 3, y = 0)
BasicBlock (x = 4, y = 1).x--;
tetro[4]
现在指向BasicBlock (x = 3, y = 1)
BasicBlock (x = 5, y = 1).x--;
tetro[5]
现在指向BasicBlock (x = 4, y = 1)
BasicBlock (x = 5, y = 2).x--;
tetro[9]
现在指向BasicBlock (x = 4, y = 2)
然后你旋转:
的下一个位置tetrominoS
是tetrominoS[1]
tetrominoS[1] = [tetro[5], tetro[6], tetro[8], tetro[9]];
但请记住 tetro[5] 和 tetro[9] 已更改!所以我们得到:
tetrominoS[1] = [BasicBlock (x = 4, y = 1), tetro[6] (unchanged), tetro[8] (unchanged), BasicBlock (x = 4, y = 2)];
这不是你想要的。
解决方案:
当您想将块移动到左侧时,不要更改块的 X 值,只需删除当前块的颜色并在其旁边的块上绘制颜色即可。
添加回答
举报