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


78

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

  • Отсутствие разработчиков игр с опытом работы с Java
  • Отсутствие хороших фреймворков для разработки игр
  • Программисты не хотят принимать Java как язык программирования игр. Большинство принимает только C ++?
  • Нет поддержки игровых приставок (хотя рынок ПК все еще существует)

Конечно, это может быть что-то еще. Может ли кто-то, кто знает бизнес лучше меня, объяснить, почему Java не набирает обороты, когда дело доходит до разработки игр?


37
А теперь подождите, пока все ответы «Java медленный, C ++ быстр», которые на самом деле только поверхностно и совершенно корректно касаются проблемы. Имейте в виду, что люди, отвечающие таким образом, почти наверняка не являются профессиональными разработчиками игр.
Эд С.

20
В самом деле, Java будет использоваться для разработки игр; т.е. на рынке мобильной связи. Java ME, Android.
user281377

21
Зачем его использовать? Что Java предлагает разработчику игр, которого нет у более широко используемых языков? Java предоставляет чрезвычайно богатые экосистемы разработчикам бизнес-приложений, которые перевешивают его недостатки как языка, но когда дело доходит до разработки игр, платформа Java предлагает мало инструментов по сравнению с рядом альтернатив.
back2dos

14
Интересно, что Minecraft основан на Java.
Ури

5
@Coder Похоже, код C ++ был сильно оптимизирован, а код Java - нет. Так что это неверное сравнение.
Изката

Ответы:


95

Некоторые причины:

  • В старые времена вам требовался «прямой доступ» для повышения производительности и пользовательского интерфейса. Это предшествует языкам ВМ, таким как Java и C #.
  • Большинство консолей (например, 360, PS3) не имеют JVM, поэтому вы не можете повторно использовать код из версии для ПК. Гораздо проще скомпилировать код C ++ для поддержки различных устройств.
  • Большинство основных игровых движков (например, Unreal) имеют привязки C ++. Есть несколько коннекторов Java (например, для OpenGL), но ничего подобного.
  • Для игр на ПК у DirectX нет сильной поддержки Java (если вообще есть).
  • Сетевые игры работают на JavaScript или Flash. Вы можете написать их на Java, используя такие вещи, как GWT.
  • IPhone работает с Objective-C.

В наши дни Java в основном используется в играх для Android просто потому, что это основной язык для этой платформы.


14
+1 «Большинство консолей (например, 360, PS3) не имеют JVM, поэтому вы не можете повторно использовать код из версии для ПК. Намного проще скомпилировать код C ++ для поддержки различных устройств» Если устройство не имеет времени выполнения вы не увидите игры, разработанные на основе этой недоступной среды выполнения. Xbox 360 и Windows Phone управляют средами .Net, поэтому разработка игр с их использованием возможна и, вероятно, является растущей тенденцией. Однако, поскольку среда выполнения отсутствует на других основных платформах (PS3 и, в гораздо меньшей степени, Wii), трудно обосновать полностью отдельную кодовую базу. Это действительно не проблема производительности вообще.
JustinC

2
Он называется XNA, который в настоящее время является подмножеством платформы .Net 2.0. В дикой природе есть и другие интересные фреймворки: MonoXNA, MonoTouch и XnaTouch и другие.
JustinC

7
Предсказуемость производительности невозможна с JVM.
Klaim

5
Очень хорошие очки. Тем не менее, я бы добавил тот факт, что сборщик мусора может вызвать непредсказуемые паузы / нагрузку. Если это не проблема для серверных приложений, это для игры в реальном времени. Это, например, видно в Minecraft.
Deadalnix

2
@Klaim Это также невозможно с mallocили new, поэтому, если это проблема, вы собираетесь реализовать объединение независимо от того, что. Вне зависимости от этого, большая проблема с Java заключается в том, что он не поддерживает типы значений, в отличие от C #.
Доваль

80

Технические причины:

  • Большинство лучших 3D игровых движков написаны на C / C ++. Это большое дело, так как большинство разработчиков игр не хотят идти на компромисс в своем 3D-движке, но и не хотят писать его с нуля. У Java есть jMonkeyEngine, который является открытым исходным кодом и на самом деле действительно хорош, но он все еще не может конкурировать с Unreal Engine .
  • В некоторых очень редких ситуациях есть преимущества в том, чтобы «приблизиться к металлу» на C или языке ассемблера, особенно для доступа к специальным аппаратным функциям. Это не так важно в наше время, но профессиональные разработчики игр все еще хотели бы иметь возможность .....
  • У Java есть сборка мусора , управляемая среда выполнения. В 99% случаев это огромное преимущество, оно, безусловно, делает кодирование более простым и менее подверженным ошибкам, и это одна из основных причин популярности Java. Однако это иногда вызывает проблемы с задержкой в ​​играх, поскольку циклы сборки мусора могут вызывать заметные паузы. Это становится меньшей проблемой для новых JVM с малой задержкой, но все еще остается проблемой для графически интенсивных игр, в которых поддержание высокого FPS имеет решающее значение.

Нетехнические причины:

  • Дома профессиональных разработчиков игр активно инвестируют в навыки и технологии C / C ++. Это создает огромное количество инерции .
  • Во многом иррациональное восприятие, что Java медленная. Возможно, верно в 90-х, определенно не соответствует действительности - вы, безусловно, можете написать прибыльную коммерческую 3D-игру на Java ( кто-нибудь из Runescape ? Или как насчет Minecraft ?)
  • Довольно справедливое представление о том, что Java больше ориентирована на бизнес-приложения и веб, чем на игры. Это может измениться с ростом Mobile и потребностью в кроссплатформенной разработке, но в настоящее время это действительно так.

Интересно, что есть и веские причины, по которым разработчики игр должны рассматривать Java:

  • Портативность - по мере роста числа целевых платформ Java становится все более привлекательной благодаря уникальной способности создавать действительно кроссплатформенные двоичные файлы.
  • Библиотечная экосистема - за очень важным исключением игровых движков 3D, Java обладает лучшим набором библиотек среди всех платформ. Сеть, звук, AI, обработка изображений, хранилище данных ключ / значение, вы называете тему и, вероятно, для нее есть библиотека Java с открытым исходным кодом.
  • Разработка на стороне сервера - Java является отличной языковой платформой для сервера, и по мере того, как все больше игр содержат элементы, рассчитанные на несколько игроков, сторона сервера будет становиться все более и более важной. Java на Linux выглядит довольно убедительно в качестве платформы.
  • JVM - это, пожалуй, лучшая в мире среда исполнения виртуальных машин с фантастической сборкой мусора, JIT-компилятором, поддержкой параллелизма и т. Д. Она будет только улучшаться, и, поскольку разработчики игр все чаще начинают использовать динамические языки в своих играх, они захотят наилучшая возможная среда выполнения.
  • Другие языки JVM - Java - надежная рабочая лошадка, но настоящее новшество происходит с новыми языками JVM (в частности, Scala, Clojure). Эти языки получают все преимущества платформы Java / JVM, а также являются чрезвычайно мощными современными языками.

19
Нет, в Java видеокартина не лучше. Большинство консолей не имеют JVM. По причинам переносимости, C ++ предпочтительнее java в мире видеоигр.
Deadalnix

5
Почему библиотечная экосистема является бонусом для Java? Сеть, звук, пары ключ-значение - это не вещь; это доступно везде в наше время. Я бы на самом деле утверждал, что AI и обработка изображений намного проще сделать с помощью библиотек C / C ++ (fann, OpenCV).
MrFox

4
Более важный, чем FPS, я бы, возможно, подчеркнул постоянную частоту кадров. Моя игра может работать со скоростью 100FPS, но если некоторые из этих кадров занимают полсекунды, это просто не получится. Даже если GC быстр, если он вызывает заметные нарушения, это все еще проблема. (Это ничего не говорит о производительности Java в частности, только общая проблема, которую нужно иметь в виду)
Gankro

1
Я написал шутер от первого лица на Java, и у меня никогда не было проблем с сборщиком мусора, даже если я не использовал его с низкой задержкой. В любом случае, когда память не распределяется в куче Java, я должен иметь дело с ней без сборщика мусора, и большая часть моей памяти занимает VBO. Другими словами, сборка мусора не является проблемой, потому что она работает, когда она используется для того, для чего она предназначена, и не ей приходится обрабатывать большие объекты в графическом процессоре или в собственной куче (! = Куча Java). Не обвиняйте наковальню в том, что она не является эффективным средством чистки зубов.
gouessej

1
@deadalnix Мир видеоигр состоит не только из консолей.
gouessej

27

Хорошо, в этой теме много дезинформации.

Я очень хорошо знаю игровой бизнес , проработав в нем 25 лет. Я также очень хорошо знаю Java в играх, будучи техническим евангелистом Sun Java Game и лектором по программированию производительности Java.

С точки зрения скорости вычислений, Java превосходит C ++ во многих тестах научных вычислений сегодня. Вы можете написать патологический код на любом языке, который работает плохо, если хотите, но, в целом, они по номиналу и были в течение длительного времени.

С точки зрения использования памяти, у Java есть некоторые накладные расходы. HelloWorld - это программа 4K на Java. Но эти издержки довольно бессмысленны в современных системах с несколькими ГБ. Наконец, у Java больше времени запуска. Я бы не рекомендовал использовать Java для коротких служебных программ, таких как команды командной строки Unix. В этих случаях запуск будет доминировать в вашей производительности. В игре, однако, это довольно незначительно.

Правильно написанный код Java-игры не терпит GC-пауз. Как и код C / C ++, он требует некоторого активного управления памятью, но не до уровня C / C ++. Пока вы сохраняете использование памяти для долгоживущих объектов (сохраняющихся для всего уровня или игры) и очень недолговечных объектов (векторов и т. Д., Передаваемых и быстро уничтожаемых после расчета), gc не должно быть видимой проблемой.

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

Хотя его настоящая Java никогда не имела привязки Direct3D, это потому, что технологии Java стремятся к переносимости. Он имеет две привязки OpenGL (JOGL и LWJGL) и привязку OpenAL (JOAL), а также переносимую привязку ввода (JInput), которая скрытно связана с DirectInput в Windows, HID Manager в OSX и привязку Linux (я забыл, какая).

Это правда, что ни один полноценный игровой движок не показал Java, как, например, Unity, показал C #, и это слабое место в независимом пространстве. С другой стороны, было два хороших APIS уровня Scenegraph, которые были полностью переносимы на платформу для Windows, OSX и Linux. Оба написаны Джошем Слэк, первый был назван движком JMonkey, а второй - Ardor3D.

Верхний постер прав, что две самые большие вещи, которые сдерживали Java в разработке игр, были предрассудки и мобильность. Последний был самой большой проблемой. Хотя вы могли бы написать игру на Java и поставить ее на Windows, OSX и Linux, консольной виртуальной машины никогда не было. Это было связано с полной неспособностью среднего звена Sun. Те немногие из нас, кто работал над Java в играх, на самом деле заключали с Sony сделки не менее 3 раз, чтобы получить виртуальную машину на Playstation, и все три раза средний менеджмент Sun убивал ее.

Хотя Sun заигрывает с клиентскими технологиями, факт заключается в том, что руководство Sun никогда не получало потребительские товары. Вот почему Java как клиентский язык от Sun никогда не преуспевала ни в какой форме, и поэтому потребовались Google и Dalvik (Java-подобная виртуальная машина Android), чтобы сделать Java платформой успешной в любом месте.

И именно поэтому я сегодня пишу игры на C #. Потому что Моно пошел туда, куда руководство Sun отказалось.


8

Java отлично подходит для бизнес-логики, серверов и платформно-независимого кода, который должен работать надежно. Есть несколько факторов, почему Java не часто используется в играх:

  • проверка границ и другие механизмы безопасности (предельная разница в производительности в наши дни)
  • необходимость преобразования между структурами данных C ++ и структурами данных Java (нельзя просто копировать память между буферами)
  • многие книги и учебные пособия следуют за толпой, поэтому трудно найти информацию о разработчиках не-C ++ игр
  • основные графические библиотеки (DirectX и OpenGL) и многие готовые движки основаны на C / C ++
  • многие игры стараются работать как можно быстрее, чтобы добавить больше визуально привлекательных функций

Нелегко работать с библиотеками C ++ из языков байт-кода, таких как Java (написание слоя JNI) и .net (множество маршаллинговых / демаршаллирующих, атрибутов API / структуры). Так что это добавляет немного работы для небольшой выгоды.

Примечание: некоторые игровые серверы используют Java.

Подобный пост здесь : https://stackoverflow.com/questions/1034458/why-arent-video-games-written-in-java


Вам не нужно писать JNI самостоятельно, просто используйте JogAmp или любую подобную библиотеку.
gouessej

Хорошая точка зрения. Я использовал JOGL и JMonkeyEngine в Java. Еще больше я использовал XNA / MonoGame для DirectX и OpenTK для OpenGL с помощью nvorbis / naudio / openal в C #. И они отлично работают для игр малого и среднего размера, особенно при работе с шейдерами. Большое улучшение производительности по сравнению с C ++. Тогда ваша единственная реальная проблема такая же, как у любого языка на основе GC: предотвращение / смягчение GC. Он будет периодически останавливать вашу частоту кадров, поэтому вам понадобятся массивы фиксированного размера, статические выделения или долгоживущие буферы, которые могут быть отброшены, когда игровой процесс остановлен (меню, загрузка, кинематика).
Грэм Уикстед,

Я использую JOGL с 2006 года, и у меня не было таких проблем даже на очень низком оборудовании в настольной среде. Сборщик мусора не виноват, потому что самые большие объекты часто находятся либо в ОЗУ графического процессора, либо в собственной куче (обычно это прямые буферы NIO), первый не управляется «нормальной» сборкой мусора, а второй - нет. t напрямую управляется «нормальной» сборкой мусора, поскольку она заботится о Java-объектах в куче Java. Разработчик должен эффективно освободить память, выделенную в собственной куче.
gouessej

По моему скромному мнению, проблема скорее заключается в некоторых «оптимизациях», представленных программистами, не относящимися к мышлению Java, которые мешают сборщику мусора выполнять свою работу. Если вы сохраняете некоторые строгие ссылки на некоторые бесполезные объекты Java, связанные с некоторыми собственными ресурсами, сборщик мусора никогда не сочтет их исправимыми. Выделение вне кучи может быть полезно в некоторых случаях, но если вы злоупотребите им, ваши долгоживущие ресурсы останутся в памяти, и вы не сможете создавать новые объекты.
gouessej

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

5

Java не достаточно быстр для разработки большинства игр. Это намного медленнее, чем использование C ++ / Assembly, которое является стандартом. Это та же самая причина, по которой дальнейшая разработка игр не осуществляется с использованием C # или VB. Разработчики игр нуждаются в планировании каждого последнего тактового цикла, который они могут получить, для таких вещей, как физические вычисления, логика ИИ и взаимодействие с окружением.

Для более простых игр Java может использоваться довольно эффективно. Если вы хотите создать клон Tetris, Bejeweled или что-то еще с таким уровнем детализации, то Java будет работать нормально. Но Java не может создавать игры, такие как Halo, Medal of Honor, Command & Conquer и так далее, и сделать их играбельными. По крайней мере, так, как это существует в наши дни.

И причины, которые вы перечислите в своем вопросе, также действительны. За исключением, я думаю, отсутствия разработчиков игр с опытом работы с Java. Многие игры на телефонах и других портативных устройствах написаны на Java (включая большинство игр для Android), а некоторые игры довольно хороши. Так что я думаю, что есть неплохая и растущая база разработчиков игр со знанием Java.

Меняется мысль о возможности использовать эти языки более высокого уровня для некоторых из более продвинутых игр. Например, одна из моих любимых игр, Auran's Train Simulator, написана большими порциями на C #, и она работает довольно хорошо. Таким образом, база растет и будет продолжать развиваться.


17
Вы пропускаете один из самых важных моментов; Подавляющее большинство инструментов и API, которые будут использоваться, написаны на C ++, и переписать их для работы с Java или любым другим языком было бы тонной работы. Кроме того, ваше обобщение о том, что «[Java] намного медленнее, чем использование C ++ / Assembly », является слишком широким, чтобы быть точным. Сборка используется не так часто, как вы думаете в играх для ПК, потому что хороший компилятор, скорее всего, сгенерирует более эффективный код, чем вы будете писать на ассемблере. Однако требуется детерминированное использование ресурсов и возможность получить право на аппаратное обеспечение.
Эд С.

15
Кто-то действительно должен создать лучший пример возможностей Java, чем Minecraft. Пока кто-то не сможет создать эквивалент WoW, C & C, MOH или Starcraft на Java или C #, я буду продолжать придерживаться того, что я сказал.
BBlake

12
«Сборка используется не так часто, как вы думаете в играх для ПК, потому что хороший компилятор, вероятно, будет генерировать более эффективный код, чем вы будете писать на ассемблере». Это еще одно обобщение. Мне еще предстоит увидеть компилятор, который сможет генерировать лучший машинный язык IA32, чем опытный программист на ассемблере IA32. Компиляторы генерируют код для абстрактной машины, которая отображается на целевой машине. Программист на ассемблере в полной мере использует базовый процессор, в том числе машинные идиомы.
bit-twiddler

10
Не забывайте об использовании памяти. Использование памяти, вероятно, важнее, чем скорость. Java не предназначена для прямого управления памятью, как C ++, и сборщик мусора означает, что использование памяти всегда значительно выше, чем C ++ для той же задачи.
Мэтью Прочитал

9
Это не 1985 год. У нас более 640 КБ памяти, лучше, чем 50 МГц процессоров, и более 1,44 МБ съемной памяти. Задача разработчиков игр сегодня не такая, как 25 лет назад. Идите вперед и найдите пример кода x86 / или ia64, созданного вручную для современной игры. Некоторые мифы просто неверны. Проблема заключается в портативности и низком уровне клиентов, использующих относительно древние операционные среды. Наименьший общий знаменатель против неотразимого погружения.
JustinC

5

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

Еще в 2002 году Джейкоб Марнер в своем отчете «Оценка Java для разработки игр» обнаружил, что Java вполне пригодна для игр, за исключением наиболее зависимых от производительности компонентов, а благодаря надежности языка и базовой JVM она дешевле сделать это таким образом.

http://java.coe.psu.ac.th/FreeOnline/Evaluating%20Java%20for%20Game%20Development.pdf

По моему личному мнению, с прогрессом, который произошел с тех пор, особенно в 3D-графике, и с отличными привязками к OpenGL и др., Этот недостаток гораздо менее выражен в наши дни.

Следовательно, проблема должна быть в другом месте. Вероятной причиной является размер среды выполнения Java (которая в наши дни гораздо менее актуальна для игр с несколькими DVD), а также инерция существующего кода. Общеизвестно, что начинать работать с нативным кодом на Java очень непросто. Третья причина - то, с чем знакомы звездные разработчики, делающие игры. Четвертый вопрос - доступна ли вообще Java на платформе.

Однако одно можно сказать наверняка - большинство игр переходят на возможность написания сценариев вместо того, чтобы с самого начала сжигать их все в коде C, и вы хотите иметь наилучшее время выполнения под языком сценариев. В наши дни это по сути означает либо CLR, либо JVM.


1
oddlabs.com/technology.php - «Мы основали нашу разработку на комбинации LWJGL и Java, которая позволяет запускать игру на любой поддерживаемой LWJGL платформе без изменений и со скоростью, сопоставимой с зависимым от платформы нативным кодом».

Jake2 превзошел Quake2 более 10 лет назад. Мы больше не в 2002 году.
gouessej

4

Разработчики игр любят быть ближе к металлу и часто пишут свои узкие внутренние петли в сборке. Java не предлагает одинаковый уровень возможной производительности, как с точки зрения постоянной скорости, так и с точки зрения использования памяти (запуск JIT берет свое).


4

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

Я бы посмотрел на это с другой стороны. Например, разработка игрового движка - это большая работа. Кто получит достаточно выгоды от его разработки, чтобы потратить время и силы на это?

Большинство очевидных кандидатов для разработки на Java в стиле фреймворков (например, IBM, Oracle), похоже, не интересуются играми. Очевидные кандидаты для разработки игр (например, Id, EA), кажется, почти одинаково мало интересуются Java.

Почти единственным кандидатом, о котором я могу подумать, что это вполне разумно, будет Google. Основным языком разработки для Android является Java, и поощрение разработки игр для Android может обеспечить реальное преимущество для платформы.

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


Я думаю, что вы столкнулись с важной проблемой игровых движков - я думаю, что это главная причина того, что Java не догнала C / C ++. Вполне возможно, что открытый исходный код может немного выровнять игровое поле - я был очень впечатлен jMonkeyEngine ( jmonkeyengine.com ).
Микера

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

1

Вопрос в том, чтобы спросить что-то вроде:

Что лучше для питания вашего автомобиля, лодочный двигатель или реактивный двигатель.

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


0

Java не была создана с учетом разработки игр, Java была создана как язык "для Интернета".

Что касается разработки игр, Sun на самом деле не поддерживала Java как язык разработки игр, поскольку Microsoft поддержала C #.

Я думаю, что отсутствие убедительных сред разработки игр - это то, что действительно убило Java в этом аспекте.


3
Но C ++ был создан не как игровой язык, а как язык системного программирования, такой как C. И Sun действительно приложил некоторые усилия к Java как к игровому языку, я думаю, что они сотрудничали с Sony, чтобы внедрить Java в PS2 или что-то, но этого не случилось ...
Anto

1
@Phobia: Но он был разработан для системного программирования.
Anto

1
@Phobia: я говорю, что это язык программирования общего назначения , такой же, как C ++. В своем ответе вы говорите, что Java не был разработан как язык программирования игры, но вы забываете, что C ++ также не разработан так.
Anto

2
@Joe Blow: со страницы Википедии о C: «Хотя C был разработан для реализации системного программного обеспечения , он также широко используется для разработки портативного прикладного программного обеспечения». Я думаю, это довольно ясно, не так ли?
Anto

2
@Phobia Я сожалею о ваших личных предпочтениях, но они совершенно не имеют отношения к обсуждению. Кроме того, я не хочу оспаривать, что в настоящее время C ++ используется почти исключительно в прикладном программировании. Это не то, о чем шла эта дискуссия. Вы утверждаете, что Java была разработана с учетом веб-программирования. Ну, C ++ был разработан с учетом системного программирования. Говорит его дизайнер. Конец обсуждения.
Конрад Рудольф

-1

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

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


-4

Для некоторых людей причина не имеет ничего общего со скоростью, библиотеками или доступностью. Это просто из-за самого языка. Некоторым людям просто не нравится язык Java. Другие люди предпочитают использовать свой любимый язык программирования вместо использования Java для создания игр.


это больше похоже на комментарий, см. Как ответить
Гнат

-8

Конечно, это может быть что-то еще. Может ли кто-то, кто знает бизнес лучше меня, объяснить, почему Java не набирает обороты, когда дело доходит до разработки игр?

Это интерпретируемый язык, то есть медленный. Вы имеете дело с графической и графической картой, которая является аппаратной. Какой хороший язык для работы с оборудованием? Ну, C ++, он довольно низкий, и вы имеете дело с указателями и прочим.

Если вы хотите прокачать сумасшедшую графику, такую ​​как crysis, и все, что вы не собираетесь делать для нее Java.

Мало того, что Oracle владеет Java, мысль о том, что компания может подать на вас в суд, не смела. Особенно, если вы хотите создать свой собственный интерпретатор для JAVA, предназначенный для игр, не получая иск из-за фрагментации FUD.


1
Вы должны серьезно прочитать о JIT-компиляции и взглянуть на некоторые тесты, в которых Java ставится против C ++
Anto

1
Кто, черт возьми, проголосовал за этот ответ? Весь этот вопрос становится невероятно смешным! Печаль во благо.
Толстяк

7
@Joe Ответ неправильный. Ява не интерпретируется.
Конрад Рудольф

3
@Atoto Забудьте эти глупые ориентиры. C ++ на несколько порядков быстрее, чем Java, где он имеет значение, см. Programmers.stackexchange.com/questions/29109/29136#29136 и programmers.stackexchange.com/questions/368/13888#13888 .
Конрад Рудольф

1
@ А на что мне смотреть? Скорость? C ++. Использование памяти? C ++. Посмотрите на minecraft и попробуйте хостинг сервера и посмотрите, сколько памяти занимает игра. Java потребляет гораздо больше памяти по сравнению с C ++. Я думаю, что сделать онлайн-игру на Java довольно сложно. Каждый бенчмарк, который я видел до сих пор, Java потребляет больше памяти, и теперь игра mmorpg, в которой центральный сервер написан на java, звучит хорошо, только если вы игнорируете аспект памяти или меняете определение массива в MMORPG.
мифический программист
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.