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

Java-игры

Недавно я изучал разработку игр, и первым языком программирования был Java. После игры в множество потрясающих игр, разработанных на С++, я задавался вопросом, почему Java не сильно используется в игровой индустрии. Я посмотрел на jMonkeyEngine 3 и несколько других игровых движков, но скриншоты, которые я видел, намного менее ошеломляют. Такие титры, как Need for Speed ​​Горячая форма преследования EA и Assassins Creed от ubisoft передают такой реализм. Почему Java не может создавать такие сильные игры в индустрии? Это искусство?

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

Спасибо, ребята.

4b9b3361

Ответ 1

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

Вы сами ответили на свой вопрос.

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

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

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

Но, несмотря на это, были некоторые успешные игры с некоторыми частями, написанными на Java, например Vampire: The Masquerade - Redemption.

Более новая игра, такая как Minecraft, полностью написана на Java; но в нем нет современной графики, поскольку акцент делается на динамическом характере виртуальной среды.

И у многих других игр и движков есть среда выполнения, которая поддерживает управляемый (безопасное автоматическое размещение и сбор памяти памяти), язык сценариев, созданный на основе высокопроизводительной рендеринговой и сетевой платформы (написанной на C/С++), например Unreal Engine.

Ответ 2

В целом все сказанное здесь было причиной не переносить на Java для разработки игр; был. Игровая индустрия в настоящее время сталкивается с изменением парадигмы . Три вещи изменились или в настоящее время меняют игровую индустрию:

  • Пиратство
  • Модели клиент-серверных моделей
  • Модели модульных сетей

Игра больше не зависит от себя. Основные преимущества, существовавшие на первых языках (языки низкого уровня), замедляются, когда их взвешивают преимущества, существующие в таких языках, как С# и Java (языки высокого уровня). Двумя грубыми, но неоспоримыми примерами являются игры, которые работают на Facebook и удаленных средах, таких как телефоны, планшеты и т.д..

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

  • 1) JVM позволяет приложениям на базе Java работать практически на любых платформы, будь то Apple, Android, Windows 8 или Linux/UNIX (практически поддерживается на любой аппаратной платформе).

  • 2) Java использует OpenJL (производную OpenGL, которая будет работать на OpenGL как клиент - jMonkey - это движок, разработанный в OpenJL). это важно отметить, что только Microsoft Windows использует DirectX, как хороший как бы то ни было, у него есть только один откат. Практически каждая ОС, которая может запускать игры, будет способный к рендерингу в OpenGL, а модульный дизайн как никогда раньше. (Обратите внимание, что Microsoft пытается отклонить эту проблему путем монополизации распространения Windows 8).

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

В то время как JVM создает проблему с задержкой, следует отметить, что такие проблемы могут быть исключены путем потоковой передачи. Я также не стал бы слишком беспокоиться о Windows 8 и толчке Microsoft. У Google есть доля акций в 720 долл./Акция, у Apple - 526 долл./Акция, а Microsoft - 27 долл. США на сегодняшний день. В то время как Apple, скорее всего, будет реализована Microsoft, главным образом из-за использования С#, Google, с другой стороны, может извлечь из этого выгоду. Microsoft никогда не очень повезло, когда конкурирует с Google и Google/Android сильно использует Java. Angry Birds была первоначально разработана в Java FYI и перенесена на С# для iPhone. Если Google/Android обеспечит стандартизацию, Microsoft упадет, как муха, взяв с собой Apple.

Ответ 3

Ответ на ваш вопрос - это художественные работы и финансовые ресурсы. И оригинал Minecreft был разработан одним человеком в java. В то время как tittles как AC или NFS развиваются из команд тысяч людей. Сравните ресурсы. Кроме того, Ubisoft использует движок игры custrom. Если вы единственный разработчик, вам следует сосредоточиться на идее из-за нехватки ресурсов. И если у вас есть идея, сборщик гарбегов является неприемлемым в обычных играх с единственным разработчиком. И как единственный разработчик вы должны выбрать самую быструю технологию разработки.

Ответ 4

Я хотел затронуть только одну сторону темы этого вопроса, но сбор мусора не является необходимым для создания низкоуровневых критически важных аспектов игрового движка типа AAA. Фактически, избегать такой системы ссылок и сбора для объектов полезно. Вы хотите, чтобы даже пользовательские типы были смежными в памяти и располагали соседние объекты в кеше и т.д.

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

Сбор мусора не является серебряной пулей против утечек ресурсов.

Как интуитивно понятный, как он звучит, посмотрите на самые протекающие приложения сегодня: те, где дольше вы их используете, все больше и больше использования памяти продолжает расти. Обычно они не являются приложениями C или С++. Приложения C/С++ могут быть печально известны для сбоев, но не для утечки. Эти протекающие гораздо чаще программируются на языках с сборкой мусора.

Например, возьмите Flash-игры. Там много, а не просто полное любительское программное обеспечение, которое использует все больше и больше ресурсов и становится медленнее и медленнее, чем дольше вы играете в игру, заставляя вас иногда перезапускать ваш браузер, чтобы снова получить игру. Однако они закодированы в ActionScript, языке, который содержит сборку мусора.

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

Это потому, что на языке GC, если вы хотите создать совместное владение новым ресурсом, R, все, что вам нужно сделать, это сохранить дескриптор/ссылку на него в другом объекте A. B и C могут также хранить дескриптор R, а теперь R имеет три владельца и будет освобожден только в том случае, если все три владельца освободят ссылку. Пользователь видит и работает только с тем, что хранит A, поэтому логика игры включает в себя удаление R из A периодически, но ссылки на него замирают в B и C, которые код забыл освободить. В C/С++ оборванный указатель здесь в B и C может быть предпочтительнее, так как это приведет к сразу обнаруживаемой и исправляемой проблеме во время тестирования игры, когда разработчик, работающий с отладчиком, очень быстро обнаружит и исправит вопрос. На языке GC это чрезвычайно сложно обнаружить, и пока программа не выйдет из строя, она может начать течь большое время.

Таким образом, GC определенно избегает оборванных указателей, но если бы что-то было свисающим на C/С++ и не было бы болтаться на языке GC, тогда это логическая утечка ресурсов на языке GC и segfault в C/С++. Другими словами, GC-обмены обманывают указатели для зависания ресурсов, которые задерживаются навсегда. Он обменивает то, что было бы вопиющим крахом, в тихую утечку, которая может быть отладочным кошмаром, чтобы обнаружить (и может даже остаться незамеченным уже после выпуска продукта). Итак, для чего-то вроде игры, которая создает массивные, динамические миры, объекты графики и физики и т.д. И, возможно, в каждом фрейме, логические утечки ресурсов - это большое дело.

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

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

Ответ 5

Не совсем верно, что сбор мусора не используется в игровой индустрии. В Unreal Engine 3 реализована сборка мусора для классов "Script". Для них производительность приемлема при использовании слегка; тяжелый подъем выполняется с помощью кода C/С++, который управляет его собственной памятью.

Как сказал Tran, Java в действительности не используется в игровой индустрии из-за опасений относительно скорости (Java запускает код на виртуальной машине, а не изначально... большую часть времени) и потому, что уже существует большое количество талантливой игры программисты, которые написали много часто используемого кода на C и С++. Это не означает, что вы не можете использовать Java для создания игры, потому что есть несколько игр Java, но игровая индустрия "mainstream" вложила значительные средства в бэкэнд C/С++.

Ответ 6

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

Ответ 7

u может найти игры, написанные в java (движок jmonkey написан полностью в java).

Здесь → " http://www.indiedb.com/engines/jmonkeyengine/games".

1.разрушительный мир.

2.minecraft.

3.mynthurana.

все в двигателе jmonkey.  Качество их графики интенсивное и проблемы хорошие.

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