Как вызвать метод gameOver в Java-игре, когда спрайт «отваливается» с экрана? - PullRequest
2 голосов
/ 09 февраля 2009

Я занимаюсь разработкой простой игровой платформы на Java с использованием BlueJ.

В течение следующих нескольких недель я буду публиковать несколько вопросов с просьбой о помощи в этом проекте, так как я не очень опытен в программировании. Поэтому я надеюсь, что я не стану раздражать, и я был бы очень признателен, если бы вы могли любезно помочь мне.

В моей игре у меня есть метод gameOver, который завершает игру и выводит оператор на консоль. Я хотел бы вызвать этот метод, когда спрайт моего плеера «падает» с экрана.

Прямо сейчас у меня есть прямоугольник в нижней части экрана для обозначения какой-то опасности (например, воды), и когда игрок сталкивается с ней, он вызывает метод gameOver, и игра заканчивается. Однако я все же предпочел бы, чтобы игра закончилась, если игрок упал ниже определенной высоты экрана.

Это мой метод gameOver (из класса 'Game') -

/** End the game. */
public void gameOver()
{
    world.terminate();
    isOver = true;
}

Это мой спрайт игрока (в настоящее время рисуется с использованием многоугольника) -

super(Utils.createPolygon(170, 102,
    155, 118, 137, 118, 151, 134, 146,
    140, 167, 140, 170, 135, 174, 140,
    193, 140, 188, 134, 202, 118, 186,
    118, 170, 102)); 
setColor(new Color(254, 167, 184));

Это код (из класса «Враг», аналогичный код используется и в классе опасности), который заканчивает игру, когда игрок сталкивается с врагом-

if (e.contact.involves(player) && (player.getLives() < 1)) {
    System.out.println("YOU ARE DEAD!");
    game.gameOver();
}

Мне бы хотелось подобное или хотя бы простое решение, которое будет вызывать мой метод gameOver, когда спрайт моего игрока падает или выходит за пределы определенной координаты экрана.

Буду признателен, если вы предоставите пример / пример кода с комментариями, которые помогут мне понять его, чтобы дать представление о том, что я должен сделать для достижения этой цели.

Большое спасибо, и я с нетерпением жду ваших ответов.

Ответы [ 4 ]

3 голосов
/ 09 февраля 2009

Для начала:

  1. Подумайте, как вы можете получить текущую позицию игрока.
  2. Подумайте, что заставляет игрока падать (должен быть какой-нибудь метод / класс, который реализует гравитацию и падение?)
  3. Проверьте позицию игрока, когда он падает против границ вашего мира. Если они выходят за границы, самое время вызвать метод GameOver.

Чтобы проверить границы:

  1. Ваш мир должен иметь минимальную высоту, которую должен поддерживать игрок, чтобы остаться в живых. Запомните это значение.
  2. Если вы получите вертикальное положение вашего игрока и сравните его с этой минимальной высотой, вы должны получить логический результат (безопасный против мертвого).
  3. Обратите внимание, что позиция экрана начинается в левом верхнем углу и увеличивается при движении вправо и вниз, так что позиция вашего игрока, вероятно, отражает это. Таким образом, вы, скорее всего, ищете тест (player.getPosition().Y > world.getMaxAllowedHeight());

Для справки: пожалуйста, опубликуйте информацию о том, что вы уже пробовали и где у вас проблемы Запрашиваемое решение с ложкой никому не поможет - вам придется подумать об этом самостоятельно. Если вы не знаете, с чего начать, сообщите нам об этом; мы можем попытаться направить вас в правильном направлении.

Обновление: похоже, вы уже немного подумали, и это здорово! Извините, если я был резок, чтобы прыгнуть у вас в горле, но ваш оригинальный пост предложил иначе. В следующий раз, тем не менее, постарайтесь задать вопрос «Помоги мне самому», а не «решай сам». Простое "Может ли кто-нибудь дать мне представление о том, как начать решать эту проблему?" будет делать.

2 голосов
/ 09 февраля 2009

Хороший вопрос, который нужно задать себе: «Где мой спрайт?».

Следующий вопрос: «Каковы границы моего мира?».

Если вы сможете ответить на эти два вопроса, тогда вы сможете ответить на свой вопрос.

Предполагая, что у вас есть двумерный мир, если местоположение спрайта находится в пределах как горизонтальных, так и вертикальных границ, то ваш спрайт все еще находится на карте, в противном случае он не будет.

2 голосов
/ 09 февраля 2009

Чтобы помочь вам сделать домашнее задание:

   // if the player goes out of bounds, the game is over
   if (player.getBounds().outside(game.getBounds()) 
   {
        System.out.println("YOU WENT OUT!");
        game.gameOver();
    }

при условии, что у игрока есть какая-то ограничивающая область, а в самой игре есть какая-то область ...

1 голос
/ 09 февраля 2009

У вас есть игровой шлейф?

Обычно в игре есть какая-то тесная петля, которая контролирует логику и процесс рендеринга, что-то вроде.

while(stillRunning)
{

   if(isPlayerDead()) 
   { 
       showGameOverScreen(); 
   }
   else
   {
       PerformLogic();
       RenderToScreen();
   }

   sleep(0);
}

Вам нужно будет расширить метод isPlayerDead (), чтобы проверить наличие коллизий, и если местоположение вашего спрайта больше высоты экрана.

...