GameDevelopment: (Java & OpenGL) или (C ++ & OpenGL & SDL)? - PullRequest
8 голосов
/ 07 марта 2011

Поскольку Java поддерживает OpenGL, что является лучшим вариантом для разработки игры?

  • Java + OpenGL
  • C++ + SDL + OpenGL

Я всегда избегал Java (в разработке игр, конечно) из-за его скорости.Но я обнаружил, что Java поддерживает OpenGL.Итак, я думаю, что скорость больше не может быть проблемой ... Что выбрать?Есть замечания?

Мне было бы намного проще из-за моего опыта работы с Java и сборщиком мусора.

Спасибо

Ответы [ 8 ]

18 голосов
/ 07 марта 2011

По моему мнению, если у вас есть идея игры в вашей голове, не имеет значения, с чем вы ее пишете (сначала), C ​​/ C ++, Java, пером и бумагой ... Выберите язык, который вы ' почувствуйте себя комфортнее, создайте прототип и протестируйте свою игровую идею, как только вы наберете черновой набросок и узнаете, что вам нужно сделать, выбросьте прототип, спроектируйте игровой процесс и архитектуру, а затем начните кодировать реальную вещь. Не оптимизируйте до тех пор, пока у вас не будет работать большинство или все функциональные возможности (в общем, всегда есть мелкие ошибки, на которые нужно охотиться), и вы фактически не увидите, где находятся узкие места.

Я видел, как это происходит снова и снова, программисты игр являются одними из худших преждевременных оптимизаторов, которые пытаются выжать несколько циклов из чего-то тривиального, упуская при этом самые большие узкие места, а затем оптимизируют еще немного (в неправильном месте). ). Я также был признан виновным в этом много раз. Я бы сказал, не выбирайте C ++ (или Java в этом отношении) из-за скорости, вы можете получить очень хорошую производительность от обоих, если все сделано "правильно". При необходимости вы всегда можете переключиться на другой язык, если сам язык действительно является узким местом или действительно мешает вам что-то делать. Java не работает автоматически медленно, а C ++ не работает быстро, вы можете (очень) ошибиться с обоими. Раньше я болел за C и C ++ во всем, но после долгой работы с Java я действительно не пропускаю столько хлопот.

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

Я давно не кодировал ни одной игры, но для C ++ 2D SDL - хороший кандидат, другой вариант может быть SFML , или если вы хотите прикосновение более низкого уровня с OpenGL вы можете попробовать использовать GLFW + SOIL + некоторую аудиобиблиотеку. Для полноценного 3D я бы сказал, попробуйте либо OGRE , либо Irrlicht + Irrklang (возможно, есть и другие).

В Java есть как минимум Slick2D , Golden T Game Engine и для более низкого уровня доступа LWJGL (хотя я думаю, что вы можете получить доступ к LWJGL через Slick2D также). Для 3D кто-то рекомендовал мне jMonkeyEngine , но я никогда не пробовал.

14 голосов
/ 08 марта 2011

Я бы проголосовал за C ++ за тот простой факт, что у вас есть надежный деструктор в ваших объектах. Это позволяет вам обернуть многие компоненты OpenGL (буферы, текстуры и т. Д.). Вы можете знать, что при создании объекта ресурс распределяется, а когда объект уничтожается (или выходит из области видимости), актив очищается.

Это, безусловно, можно сделать на Java. Minecraft был сделан на Java и принес более 25 миллионов долларов.

8 голосов
/ 07 марта 2011

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

7 голосов
/ 07 марта 2011

Доказано, что Java работает так же быстро, если не быстрее, чем C ++, хотя и предоставлено, вы не добьетесь таких результатов без небольшой настройки параметров и тщательного мониторинга сборщика мусора. Если вы хотите заняться разработкой игр на Java, я бы сказал, что это хороший выбор, если вы сначала изучите, как к нему подойти.

2 голосов
/ 07 марта 2011

Ну, я запрограммировал все свои игры на SDL, и я определенно рекомендую использовать c ++. Хотя вы можете посмотреть на SFML!

http://www.sfml -dev.org /

SFML уже интегрирован с OpenGL, и довольно просто начать работу с программированием игры.

2 голосов
/ 07 марта 2011

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

Если вы планируете делать большие игры в будущем, C ++ лучше всего подходит для общего опыта.Большинство коммерческих игр написаны на C / C ++.Microsoft также имеет платформу XNA, которая использует C #

Идентификатор по-прежнему идет с языком программирования, с которым вам удобнее, они оба великолепны

Однако, если вы не против учиться немного больше, переходите на C ++

2 голосов
/ 07 марта 2011

Это действительно зависит от того, к какому языку вы привыкли.Есть более крутая кривая обучения с C ++, чем с Java.Если вы не владеете ни одним из языков и хотите завершить разработку, я бы порекомендовал java.

И небольшое примечание.Если вы совершенно новый пользователь, я бы порекомендовал взглянуть на XNA, но он основан на DirectX.И вы должны знать немного C #.

2 голосов
/ 07 марта 2011

Если вы идете по маршруту Java, вам может понадобиться отправить JVM вместе с вашей игрой. Это не значит, что не делайте этого, но многие люди могут не иметь установленной Java или не иметь достаточно свежей версии для нужных вам функций и производительности. Я не рассматривал лицензионные требования для доставки JVM, но, вероятно, вы захотите это изучить, прежде чем принимать решение.

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

...