2010-12-31 4 views
0

В настоящее время я создаю игру и имею проблему, которая, как мне кажется, я знаю, почему она происходит, но не совсем уверена и даже если бы я знал, не знаю, как ее решить. У меня есть 2D-массив 10 x 10 и есть класс «игрока», который занимает плитку. Теперь я создал 2 экземпляра плеера и переместил их через swiping. По краям я поставил «стены», которые игрок не может пройти, и все отлично работает, пока я не удалю стену. Как только я удаляю стену и перемещаю персонажа/игрока на край экрана, игрок не может идти дальше. Проблема возникает здесь, когда второй экземпляр игрока не находится на краю экрана, но говорит 2 плитки из первого экземпляра «игрока», который находится на краю. Если я попытаюсь переместить их дальше в направлении края, я понимаю, что первый экземпляр игрока не двигался и ничего не делал, но второй экземпляр игрока все равно должен двигаться, но он не будет.Проблема с логикой игры для Android

Это код, который выполняется, когда пользователь пойло:

if (player.getArrayX() - 1 != player2.getArrayX()) { 
    player.moveLeft(); 
} else if (player.getArrayX() - 1 == player2.getArrayX() && player.getArrayY() != player2.getArrayY()) { 
    player.moveLeft(); 
} 

if (player2.getArrayX() - 1 != player.getArrayX()) { 
    player2.moveLeft(); 
} else if (player2.getArrayX() - 1 == player.getArrayX() && player2.getArrayY() != player.getArrayY()) { 
    player2.moveLeft(); 
} 

В классе игрока у меня есть:

public void moveLeft() { 
    if (alive) { 
     switch (levelMaster.getLevel1(getArrayX() - 1, getArrayY())) { 
     case 0: 
      break; 
     case 1: 
      subX(); // basically moves player left 
      setArrayX(getArrayX() - 1); // shifts x coord of player 1 within tilemap 
      Log.d("semajhan", "x: " + getArrayX()); 
      break; 
     case 9: 
      subX(); 
      setArrayX(getArrayX() - 1); 
      setAlive(false); 
      break; 
     } 
    } 
} 

Любая помощь по этому вопросу или дальнейшего понимания было бы весьма признателен, спасибо ,

+0

Так много вопросов ... Что такое 'player.getArrayX()'. Что такое 'subX()'. Что делает 'setArray()' do. Что возвращает 'getLeve1'. Сейчас этот вопрос совершенно неопровержимый, и похоже, что у вас довольно грязный дизайн. – Falmarri

+0

getArrayX() возвращает координату x игрока. subX() вычитает ширину плитки, setArrayX() устанавливает новую координату x игрока, а getLevel возвращает идентификатор карты 2d tile в местоположении (x, y). Я действительно не понимаю, как это связано с вопросом, который я задал, поскольку все эти методы работают отлично. Мне просто интересно, не был ли экземпляр игрока не двигаться из-за того, что что-то связано с первым игровым экземпляром, попавшим в край карты плитки. – semajhan

+0

Я все еще смущен тем, что делает 'subX()'. Кроме того, что означают идентификаторы карты плитки? Я предполагаю, что 0 - стена, 1 - открытое пространство, а 9 означает, что координаты недействительны? – Computerish

ответ

0

решаемые путем добавления, если другое заявление:

public int getLevel1(int i, int j) { 

    int[][] level = { 
      {1, 1, 1, 1, 1, 1, 1, 1, 1, 1}, 
      {1, 1, 1, 0, 0, 1, 0, 1, 1, 1}, 
      {1, 1, 1, 1, 1, 1, 1, 1, 1, 1}, 
      {1, 0, 1, 1, 1, 1, 1, 1, 0, 1}, 
      {1, 0, 1, 1, 1, 1, 0, 1, 0, 1}, 
      {1, 0, 1, 1, 0, 1, 0, 1, 0, 1}, 
      {1, 0, 1, 1, 0, 1, 1, 1, 0, 1}, 
      {1, 0, 1, 1, 1, 1, 1, 1, 0, 1}, 
      {1, 0, 1, 1, 0, 1, 1, 1, 0, 1}, 
      {1, 0, 1, 1, 0, 1, 8, 1, 0, 1}, 
      {1, 0, 9, 1, 1, 1, 0, 1, 0, 1}, 
      {1, 0, 1, 1, 1, 1, 0, 1, 0, 1}, 
      {1, 0, 1, 1, 1, 1, 1, 1, 0, 1}, 
      {1, 0, 0, 0, 0, 0, 0, 0, 0, 1}, 
      {1, 1, 1, 1, 1, 1, 1, 1, 1, 1} 
    }; 
    if (i >= 0 && i <= 9 && j >= 0 && j <= 14) { 
     return level[j][i]; 
    } else { 
     return 10; 
    } 
} 
Смежные вопросы