Что я должен использовать для отображения игровой графики? - PullRequest
8 голосов
/ 06 июня 2011

У меня есть система для игры, но я не знаю, что мне следует использовать для ее отображения. Я делаю вертикальный шутер, и я написал методы для всех классов, управляющих врагами и игроками, но я не представляю, как эффективно отобразить игру. Я думал о Canvas, который будет перекрашивать каждый кадр, но действительно ли это самый эффективный метод?

Важные детали:

  1. идеальная частота кадров: 25 кадров в секунду
  2. Это 2d игра
  3. На экране одновременно может находиться от 25 до 100 объектов, каждый из которых движется
  4. Все объекты отображаются в виде изображений, все в формате PNG
  5. Окно 640px на 480px
  6. Прямо сейчас все изображения загружаются как BufferedImage, хотя я мог бы легко изменить это

7. Мне нужна координатная плоскость. Это единственная фундаментальная часть, которую нельзя изменить без полной реструктуризации моего кода.

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

Ответы [ 4 ]

4 голосов
/ 06 июня 2011

Если Swing приемлем, JPanel по умолчанию имеет двойную буферизацию, а javax.swing.Timer с периодом 40 мс даст вам обновления ~ 25 Гц. Этот пример показывает базовый подход, в то время как этот пример показывает количество изображений в движении.

Мне нужна координатная плоскость.

Нет ничего необычного в том, что модель и вид используют разные координаты; все, что нужно, - это функции для сопоставления одной системы другой. В этой игре представление опирается на четыре метода , которые отображают плитки на пиксели и наоборот. Тот же подход описан здесь для плиток карты.

3 голосов
/ 06 июня 2011

Вам доступно несколько вариантов:

Во-первых, вы можете использовать одну из существующих игровых сред Java:

  1. JMonkeyEngine (http://jmonkeyengine.com/)
  2. пятно (http://slick.cokeandcode.com/index.php)

(Slick нацелен на 2D-графику, а JMonkey нацелен на 3D и использует OpenGL - хотя я изучал их использование, я сам на самом деле их не использовал)

Кроме того, вы можете написать все самостоятельно. Судя по звукам вещей, это ваша первая (графическая) игра, поэтому вы можете изучить технику, известную как двойная буферизация, при которой вы записываете каждый кадр вне экрана и просто рисуете все это на экране, так как это может привести к более плавной анимации.

Чтобы получить больше информации о разработке игр, я настоятельно рекомендую прочитать этот сайт, Программирование Killer Game на Java от доктора Эндрю Дэвисона, поскольку он дает несколько хороших советов, а также обеспечивает хороший прогрессивный путь обучения для новых разработчиков игр и перевода их в 2D, а затем в 3D разработку.

НТН

2 голосов
/ 06 июня 2011

Ответ действительно зависит от того, является ли эта игра 2D или 3D.

Если ваша игра 2D, простой способ сделать то, что вы хотите, это использовать собственный API Java 2D Graphics.Хороший учебник для начала (по крайней мере, на мой взгляд) можно найти на Учебники Java .По своему опыту я обнаружил, что графический API Java прост в освоении и более эффективен, чем можно было ожидать.Основная техника состоит в том, чтобы ваш игровой код отслеживал положение всех ваших объектов, затем переводил эти координаты в координаты экрана и отображал соответствующие изображения в этих местах.Однажды я сделал (очень, очень простую) игру на Java, и этим методом я воспользовался.

Если ваша игра в 3D, OpenGL, безусловно, поможет.У меня ограниченный опыт работы с OpenGL, поэтому я не уверен, насколько легко работать с привязками Java.В общем, 3D-программирование - это серьезная тема, поэтому, если это новый проект или вы не готовы к значительным временным вложениям, я бы попытался найти хороший игровой каркас для использования или создания игры 2D.Если вы заинтересованы в OpenGL или 3D-программировании в целом, быстрый Google включил проект JOGL .Я бы порекомендовал исследовать JOGL как способ доступа к API OpenGL из Java-кода, но для реального изучения OpenGL я рекомендую OpenGL SuperBible (5-е издание) , широко известное как "Синяя книга".Все примеры кода на C ++, но для функций OpenGL это может быть просто вопрос использования библиотеки-оболочки.Например:

glDrawElements(...);

Может стать:

JavaGLWrapperObject.glDrawElements(...);

К сожалению, я не могу привести конкретные примеры, потому что я не использовал OpenGL с Java-программой, но приведенный выше пример очень грубыйПримерно, как OpenGL ES используется на платформе Android.

Что касается производительности ... API Java поставляется с нетривиальной суммой накладных расходов, но я мог видеть, что это хорошо для ваших целей.Возможно, вам придется приложить немного больше усилий, чтобы сделать ваши алгоритмы эффективными, и ваша игра может работать не так хорошо на менее мощном оборудовании.Если вы решите пойти по маршруту OpenGL, он почти наверняка будет на намного быстрее (опять же, в зависимости от того, насколько эффективны ваши алгоритмы), но, соответственно, на 1021 * намного сложнее учиться и получатьначалось с.Конечно, выполнимо, но это будет проблемой.

0 голосов
/ 06 июня 2011

Canvas будет слишком медленным для 25+ кадров в секунду.

номер объекта не имеет значения, насколько они сложны.

если это 100 изображений, то ничего не получится по сравнению с 1 3D моделью Аватара, например.

в Java вы можете использовать либо Opengl, либо Java3D

Я бы предпочел использовать Opengl как личный выбор

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...