Подтвердить что ты не робот

C против Java для программирования игр

Я понимаю, что С++ обычно считается лучше, чем Java для игр (по крайней мере, в более крупных играх). Почему это?

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

EDIT: немного незнакомы с C/С++ и не думал дифференцировать между двумя в строке 1 > . <

4b9b3361

Ответ 1

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

Перемещение на Java (или С#) также потребует создания новой управляемой JVM (или CLI) с высокой производительностью по сравнению с крупными 3 (ПК, X360, PS3) или big-5 (добавьте Wii, iPhone). Это технически выполнимо, но не является финансово жизнеспособным.

Изменить: любой человек с низкоуровневыми знаниями как о виртуальных машинах, так и о текущем состоянии игровых движков может сказать вам, что JVM или CLI можно без сомнения реализовать с новым игровым движком, чтобы превзойти производительность текущих С++-движков. Фактор предотвращения - это время и деньги, не более и не что иное.

Ответ 2

Высокая производительность и инерция C и С++ традиционно используются для игр.

Выбор на основе производительности не является таким большим приоритетом, если вы не делаете 3D-феерию.

Ответ 3

Потому что:

  • Java не скомпилирован в собственный код, что означает, что при первом запуске кода происходит производительность.
  • Java не дает вам предсказуемой модели памяти (нужны консольные игры)
  • Java не дает вам окончательное завершение объекта.
  • Java не так близка к оборудованию, как C, это очень важно для профессионального программирования 3D-игр.
  • У консольных программистов, вероятно, нет JVM, который работает на PS3, X-Box и т.д.
  • Пределы исполнения времени выполнения.
  • Вы никогда не сможете выжать столько же производительности из приложения Java, сколько можете, с помощью С++-приложения.

Есть, вероятно, больше причин, например, тот факт, что они используют уже существующий код, написанный на C или С++.

EDIT: В стороне, я не думаю, что многие современные игры написаны на C. OOP поддается разработке игр, а С++ - это де-факто язык выбора.

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

Ответ 4

Я бы сказал, что, несмотря на другие ответы, указывающие на недостаток скорости, вызванный главным образом JVM, настоящая причина, по которой люди не кодируют игры на Java, - это отсутствие поддержки для таких сред, как DirectX и OpenGL (которые на самом деле устраните необходимость того, чтобы ваш код был близок к его аппаратным средствам, как это было предложено некоторыми ответами). Это базовые рамки, которые люди обычно используют для игр с кодами, особенно в настоящее время, когда 3D-игры повсюду - и отсутствие поддержки для них - причина, по которой Java не рассматривается как язык разработки игр.

Чтобы подчеркнуть свою точку зрения, я бы предложил вам взглянуть на Microsoft XNA, который в настоящее время оптимизирован для кодирования на С# через .NET framework (который, как Java, является Just-In-Time-Compiled и не запускается изначально как таковой). Интерфейс XNA взаимодействует с DirectX, который говорит об аппаратном обеспечении, и поэтому он очень быстро.

ИЗМЕНИТЬ

@Ed Комментарий Swangren заставило меня осознать еще одно различие между .NET против Java, когда рассматривается для разработки игры. Я считаю, что еще одна сильная сторона .NET заключается в том, что если вам нужно будет выжать последний бит производительности и выполнить некоторую математику указателя или реализовать сложный высокопроизводительный алгоритм, это намного проще благодаря небезопасный. Конечно, вы даже можете выйти за рамки этого и написать собственные библиотеки, которые будут использоваться вашим кодом С#, который становится довольно простым благодаря P/Invoke.

Ответ 5

Оставляя C (++) в стороне на данный момент... Я склонен сказать, что большая часть причин заключается в том, что Java не имеет ничего подобного XNA. Какие преимущества имеет на самом деле Java над языком, например, С++, когда дело доходит до разработки игры? Вы должны учитывать, что некоторые из его типичных преимуществ исчезают для конкретной области разработки игры, в то время как С++ получает несколько.

XNA - это то, что сделало С# очень популярным языком для развития любительских игр, и вопреки распространенному мнению, вполне жизнеспособный вариант для коммерческого развития. С#/.NET является параллельной Java во многих отношениях (и, возможно, лучшей в настоящее время в настоящее время), когда у людей теперь есть возможность для разработки игр с языком более высокого уровня, С# будет казаться гораздо более привлекательным, если только крест Поддержка платформы необходима (опять же, у нас есть Mono и OpenGL для .NET).

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

Ответ 6

  • Java не имеет управляемой производительности
  • С его высокой степенью обратимости, так сложнее защитить
  • Многие игры используют языки сценариев, такие как lua ​​или python, для программирования "высшего уровня".
  • API большинства систем ориентирован на C.
  • Java может использоваться для серверных систем на заднем сервере, к которым игры подключаются к
  • Flash-игры, похоже, заняли нишу, которую могли играть Java-игры.

Ответ 7

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

Java имеет привязки OpenGL, как указывали другие, поэтому доступ к аппаратным средствам не является такой проблемой, потому что не все игры нуждаются в этом, некоторые коммерческие игры были написаны для Java3D.

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

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

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

Ответ 8

Я думаю, что C или С++ - лучший язык для построения многих типов игр, потому что он ближе к аппаратным средствам и, вероятно, будет первым языком, реализованным на любом новом оборудовании. Мало того, что библиотеки для доступа ко многим расширенным функциям сегодняшнего оборудования, скорее всего, будут реализованы в C.

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

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

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

Java также может быть хорош для игр клиент/сервер, где сервер написан на Java.

Ответ 9

Очень сложно написать программу, которая работает в постоянной памяти без сбора мусора в Java.

Ответ 10

Если вы хотите читать заявления от игровых студий, которые с удовольствием используют java для серьезной разработки игр, тогда выполните поиск по твиттеру для #javaforgames https://twitter.com/search?q=javaforgames

Изучив твиты разработчиков Java, вы поймете, что Java хорош для разработки игр, если вы используете его в сочетании с API-интерфейсом с игровым движком высокого уровня, таким как libgdx и jmonkeyengine, которые облегчают работу по разработке и делают игру настроенной на использование Аппаратное ускорение OpenGL/ES обеспечивается современным оборудованием GPU.

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

Некоторые разработчики игр предпочитают java для этапа разработки игры для разработки встроенных инструментов.

Игровые студии Java и разработчики, которые ищут наилучшую производительность, могут архивировать его, тщательно контролируя OpenGL, используя JOGL или LWJGL напрямую. Также производительность и гибкость архивируют это, написав свой собственный движок, если это позволяет время и деньги.

Ответ 11

Я бы не сказал, что всегда верно, что C лучше, чем Java для программирования игр.

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

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

Ответ 12

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

Ответ 13

Инерция в основном... Хотя это немного устарело, вы можете посмотреть Jake2 (который является чистым Java-портом Quake 2 с jogl как openGL lib).

Он может выполнять до 85% быстрее, чем оригинал С++, что означает, что он подходит для большинства игр; особенно современные, которые основаны скорее на социальной и игровой игре, чем на ограниченных "жестких ядрах".

Я бы также предположил, что большинство ответов, которые вы получаете здесь, исходят от игрового geek/ "Я хочу самое крутое оборудование и игры". Для [этих] тяжелых 3D-игр и геймеров этот последний 15% чрезвычайно важен, а это то, что отделяет графическую карту стоимостью 150 долларов от 500 долларов, которые они только что купили.

Как сообщается, Джон Кармак сказал (что-то вроде этого): "Если бы я сейчас начал программирование игр, я бы запрограммировал для iPhone". например это не так весело, чтобы сделать самую быструю игру с лучшим 3D-движком, так как это сделать лучшую игру.

Ответ 14

Рынок консольных игр примерно в 10 раз больше (в финансовом отношении), чем рынок ПК. Для консолей текущего поколения все основные программы написаны на C или С++ с некоторыми небольшими бит встроенного или ассемблерного. Если вы хотите стать профессиональным игровым программистом и работать в любой крупной игровой компании, изучите C и С++.

Более того, все коммерческие кросс-платформенные движки, которые являются отправными точками для многих коммерческих игр, также находятся на C или С++.

Возможно, вы сможете работать с небольшими играми в java и flash или даже случайными играми Windows на С#. Вы даже можете закодировать С# для игр XNA, но если вы хотите сделать игры REAL (нажатые на DVD) XBOX 360, вам нужно изучить С++.

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

Ответ 15

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

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

На рабочем столе есть несколько игр Java, но они не могут конкурировать с лидерами рынка, такими как World of Warcraft.

В Интернете апплеты давно мертвы, и если вы собираетесь сделать случайную игру, это будет во Flash.

В мобильном пространстве JME имеет время на солнце, но это на пути к устареванию перед лицом более совершенных платформ, таких как iPhone.

Идеальный мировой сценарий для Java, который будет тяжелым нападающим в игровом мире, будет для Sun/Oracle для доставки игровой платформы, такой как Wii или iPhone, - обязательное устройство, которому все владеют. Тогда есть хорошая причина для разработчиков инвестировать время в эксперименты с новыми технологиями. Но, учитывая, что Sun и Oracle явно не заинтересованы в потребительском рынке, шансы на создание игровой платформы невелики.

Ответ 16

Это не техническая проблема, а проблема "клиентской оптики" для этого.

Хороший код Java может работать так же быстро, как хороший код на С++. Он может получить доступ к OpenGL так же быстро, как и собственный С++ с помощью таких проектов, как LWJGL и JMonkeyEngine.

Настоящая причина в том, что Sun никогда не пыталась выделить Java для игр, и они никогда не делали развертывание особенно легким для игр Java. Это много работы и усилий разработчика/команды для создания бесшовной/плавной установки (и запуска?) Для проигрывателя.

Клиенты просто не "доверяют" Java-играм и не берутся под залог во время процесса установки, когда видят логотип.

Ответ 17

Хотя старый, никто здесь, кажется, не указывает

Все игры и приложения на Android запрограммированы в Java

Потому что не только Android написан на Java, но и большинство его приложений/игр и т.д.

Ответ 18

Я отвечу совсем по-другому.

Если Java может не написать драйвер устройства, такой как C, как вы можете себе представить, что он будет быстрее, чем язык, на котором уже написан драйвер?