我正在尝试为 android 制作俄罗斯方块游戏,以帮助学习 android 的游戏编程。按下按钮时,我的 goLeft/Rights 向右中断,向左移动的代码位于字段 int 数组和列表部分数组分开的类中。字段数组由引用变量 (TetrisWorld tetrisworld;) 访问。虽然零件列表数组是公共的,但可以通过 goLeft() 代码中的变量(零件)代码访问。它在以下位置中断: if(tetrisworld.fields[x][part.y] != 0) 左侧代码:
public void goLeft() {
int x = 0;
for(int i = 0; i < 4; i++) {
TetrisParts part = parts.get(i);
x = part.x - 1;
if(tetrisworld.fields[x][part.y] != 0) {
noleft = true;
break;
}
}
if(noleft == false) {
for(int i = 0; i < 4; i++) {
TetrisParts part = parts.get(i);
part.x--;
}
}
}
字段 int 数组的代码:
int fields[][] = new int[WORLD_WIDTH][WORLD_HEIGHT];
WORLD_WIDTH 和 WORLD_HEIGHT 都是静态最终整数,宽度为 9,高度为 19
我试过把 if(tetrisworld.fields[0][0] == 0) 和它仍然崩溃,所以我认为它与变量无关。即使我还没有添加代码来检查它也不会超出界限,因为我在 x = 5 附近产生了 teroid 并且因为一旦没有机会我就不能向左/向右走正在发生
我尝试将 goLeft/Right 方法移动到具有“world = TetrisWorld();”的游戏屏幕类 它仍然在同一个地方出错
更新:
好的,只需添加:
tetrisworld != null
对于第一个 if 语句修复它,我现在的问题是,它为什么修复它?为什么没有这张支票我不能搬家?据我所知,这显然不是无效的原因;它现在完全响应。
但是解决这个问题的一种更简单的方法是改变fields
为静态......然后像这样访问它:TetrisWorld.fields
所以我更新的代码是:
public void goLeft()
{
noleft = false;
for (int i = 0; i < 4; i++)
{
part = parts.get(i);
if (part.x - 1 < 0 || TetrisWorld.fields[part.x - 1][part.y] != 0)
{
noleft = true;
break;
}
}
if (noleft == false)
{
for (int i = 0; i < 4; i++)
{
part = parts.get(i);
part.x--;
}
}
}