Я пытаюсь сделать тетрис для андроида, чтобы помочь освоить программирование игр для андроида. Мой 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, и так как я не могу идти влево / вправо, как только у меня нет шансов на это случается
Я пытался переместить методы goLeft / Right в класс игрового экрана, который имеет "world = TetrisWorld ();" и он все еще глючит в том же месте
UPDATE:
Хорошо, просто добавив:
tetrisworld != null
к первому, если оператор исправил это, мой вопрос теперь, почему это исправило это? Почему я не могу двигаться без этой проверки? Насколько я знаю, это явно не пустая причина; теперь он полностью отзывчив.
Но более простой способ решить эту проблему, который прост в SOOOO, - это поменять 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--;
}
}
}