Чи є Java життєздатною для серйозних ігор? [зачинено]


64

Я переглянув Інтернет, але ресурсів для розробки ігор Java не дуже багато, майже не так багато, як C ++. Насправді більшість двигунів написані на C ++. Я спробував пограти в гру, зроблену з jMonkeyEngine, але гра була жахливо повільною, аж до мого комп'ютера замерзло. У мене не було запущених інших програм Java, і нічого надто інтенсивного ресурсу. На відміну від цього, мій комп'ютер може легко грати в більшість сучасних 3D-ігор. Якщо я продовжую навчатись та вдосконалювати Java зараз, а виявиться, що пізніше мені потрібно вивчити C ++, зробити перемикання може бути складно.

Чи є Java прийнятною мовою для серйозної розробки ігор? Під серйозним, я маю на увазі якісну графіку, без особливого відставання від сучасних комп’ютерів. Я також хочу розглянути можливість створення ігор для консолей.


25
Хіба Minecraft не будується з Java? Або переважно OpenGL? Ох, і перевіряйте C #, якщо ви на 100% не налаштовані на Java, як це дивовижно.
Аралокс

7
Чому ви не зайшли в чат Staflow Overflow C ++? Ми любимо C ++, вважаємо, що це можна абсолютно правильно використовувати, і ми знаємо, як це зробити, і ми будемо абсолютно раді поділитися.
DeadMG

12
Minecraft - це java + LWJGL + навички кодування Notch, тому для продуктивності це ГОТОВО.
MLProgrammer-CiM

3
Незалежно від того, чи є ваші ігри з кодуванням чи що-небудь інше, замикання себе на одній мові не допоможе вам у майбутньому. Відділіться трохи, або C ++, або щось інше, як Python. Це вимагає часу, але це робить вас кращими розробниками.
loganfsmyth

4
Ви отримаєте багато дезінформації, тому що війни Java / C ++ яскраво горять, будьте готові запитати конкретні приклади, перш ніж приймати думку, а також самостійно більше досліджувати =) Це, як було сказано, я згоден з @loganfsmyth, що вам потрібно буде знати багато мов, оскільки лише тоді ви зможете вибрати правильний інструмент для будь-якого завдання. У найближчому майбутньому, якщо ви просто хочете навчитися "програмуванню стилів гри", тоді використовуйте те, що вам зручно (Java), а потім пізнайте C ++ пізніше. Чорт, пізніше ви можете робити контент-конвеєри на C # та ігри в Java ME, важко передбачити =)
Патрік Х'юз

Відповіді:


54

Так, перевірте цей список на підтвердження. Це декілька ігор, зроблених за допомогою Java з використанням Легкої бібліотеки ігор Java (LWJGL). Це рамка низького рівня, яка забезпечує OpenGL для високоякісної графіки та OpenAL для звуку. Він також пропонує API введення. За допомогою них ви можете легко почати серйозну розробку ігор на Java.

Наразі я пишу свою другу 3D-гру як проект хобі на Java, і мені це просто подобається. Раніше я писав свої ігри з C ++, але після переходу на Java вже не повертається. Підтримка декількох операційних систем з Java може бути дуже простою, наприклад, моя попередня гра Java, яку я розробляв в Windows протягом року, працювала в Linux відразу і в OS X лише з однією помилкою без необхідності компілювати що-небудь на цих платформах.

З іншого боку, з Java у вас є кілька проблем.

  1. Збирач сміття. Як зазначають інші, недетерміноване управління пам'яттю - це проблема, і вам потрібно це кодувати.
  2. Відсутність сторонніх бібліотек. Більшість доступних бібліотек не підтримують Java. З іншого боку, у вас завжди є можливість зателефонувати до цих рідних бібліотек з Java, але для цього більше роботи. Є також порти Java або готові обгортки, доступні для популярних бібліотек, наприклад, я використовую JBullet - порт Java бібліотеки фізики Bullet . З іншого боку, у Java є вбудована величезна бібліотека класів, яка зменшує потребу в сторонніх бібліотеках, які не пов'язані з грою. Відсутність бібліотек не була проблемою для мене, але я можу уявити, що це може бути і для інших.
  3. Java не підтримується популярними ігровими консолями, і наскільки я знаю, немає простого переходу на ті, які перебувають з Java. З іншого боку, Android, яка є популярною мобільною платформою, використовує певну форму Java. Цей варіант також є, але не за винятком того самого коду Java для роботи як на ПК, так і на пристрої Android.
  4. Менша громада. Більшість ігрових програмістів використовують C ++, і, на мій досвід, часто не люблять Java. Не сподівайтесь отримати стільки допомоги від інших. Не сподівайтесь влаштуватися на роботу в розробці ігор без навичок C ++.

40

Не зовсім. Ось річ - по-перше, існує дуже мало з точки зору існуючих бібліотек для Java порівняно з практично всім, що є для C ++.

По-друге, Java як мова просто не піддається розвитку ігор; я маю на увазі, наприклад, якщо ви маєте справу з буферами GPU, то Java не надає мовної функції, яка допоможе вам переконатися, що вони правильно заблоковані та розблокований або знешкоджений, що робить C ++. Плюс є проблема продуктивності - і GC не детермінований, що дуже погано для гри.

Я ніколи не спостерігав жодної неінді-гри, яка проводила значний час мовою, яка не була зібрана до рідного коду до виконання, і навіть інді-ігри, які роблять це, є рідкістю. Тож зараз я вірю, що цього просто неможливо зробити.

Крім того, якщо я продовжую навчатись і вдосконалювати Java зараз, і виявиться, що пізніше мені потрібно вивчити C ++, чи стане перехід складним?

Так, абсолютно так і буде. Java та C ++ сильно відрізняються, незважаючи на їх поверхневу синтаксичну схожість. Досвід Java не враховує практично нічого під час вивчення C ++.

Ігровий процес над графікою - це прийнятний вибір, і ви можете побачити це в успіху таких ігор, як Terarria та Minecraft. Але якщо ви маєте намір створити графіку srs, то це не стане можливим на Java.


6
+1, оскільки він вказав важку графіку, швидку гру, не відстаючи.
Джошуа Дрейк

1
Відсутність Яви неподписаних типів даних також протистоїть. Так, ви можете обійти його, але це не ідеально, і ви будете використовувати код, який насправді не відображає основні дані правильно.
Максим Мінімус

@deadmg Якщо справа заблокована та розблокована , ви маєте на увазі якусь функцію apxi DirectX? & Чи можете ви мені сказати, що так поганого в недетермінованому GC?
Куазі Ірфан

Недетермінований GC може прирівнюватися до випадання кадрів, якщо ви погано зупиняєте світову паузу, і вона блокує речі довше, ніж потрібно для візуалізації кадру. На практиці це насправді не трапляється часто / коли-небудь, якщо ви плануєте використовувати пам'ять, колектори JVM можуть бути налаштовані на паузу з невеликою паузою (цілком в безпечних межах для падіння кадру). Але все-таки не з цим займатися. Вам в кінцевому підсумку доведеться повернути значну кількість продуктивності, яку ви отримали, покинувши C ++.
Майкл

2
Для початку вам доведеться повністю переписати.
DeadMG

25

Отже, я дуже серйозно ставлюсь до розробки ігор, чи все ж Java є життєздатним вибором? Я кілька разів намагався вивчити C ++, але мені не дуже подобається мова. Я не знаю чому, але зазвичай, коли я намагаюся навчитися, я ніколи не можу зрозуміти теми.

Якщо ваша причина вибору Java полягає в тому, що ви не можете зрозуміти C ++, ваші програми Java не будуть досить швидкими для високоякісної графіки. Використовувати мову вищого рівня слід тому, що це робить вас більш продуктивними, а не тому, що ви не могли зрозуміти мову нижчого рівня.

Я не думаю, що це зовсім погана ідея писати гру на Java, особливо якщо гра проста, але ви негайно зіткнетеся з проблемами продуктивності на Java, якщо ви використовуєте її як милицю.

Отже, коротше, чи можна Java сприймати серйозно, для серйозного розвитку ігор. Сюди входить важка графіка, швидка гра в ігри без відставання, а можливо, і простий перехід на консолі?

  1. Важка графіка: Можливо, але ви будете робити те ж саме в Java / LWJGL, як і в C ++ / GL: писати байти в буфери GPU та / або використовуючи застарілі списки дисплеїв, як це робить Minecraft. Якщо ви не розумієте управління пам'яттю, ви також не будете робити це правильно.

  2. Швидка гра без затримок: завдання не з будь-якої мови, і ви, швидше за все, стріляєте собі в ногу в будь-якому випадку, не вкладаючи в це думки.

  3. Ні, Java не буде доступна на консолях.


Що стосується побічного питання, що замінило списки дисплейів, коли вони застаріли?
Суди

@Suds: Програмований трубопровід, я вважаю.
DeadMG

га! вже накрила. Про: gamedev.stackexchange.com/questions/22170 / ...
Джиммі

Мобільні платформи можна вважати консолями. Я розумію, що він, мабуть, говорив про велику трійку, але Android використовує Java і для цього створено безліч ігор.
Amplify91

1
@ Amplify91 так декілька ігор написано на Java для android. Але більшість хороших ігор та, ймовірно, всі графічно-інтенсивні чи багатоплатформні ігри написані на C ++ за допомогою Android NDK.
Койот

15

Досвідчений програміст, як правило, знає багато мов програмування - вивчити додаткові мови програмування не надто складно, коли ви добре знаєте одну. Однак я настійно рекомендую, щоб C ++ не був вашою першою мовою, і, мабуть, не другою.

Це тому, що C ++ отримує велику ефективність від того, щоб не робити жодної суттєвої перевірки помилок виконання. Наприклад, доступ до елемента з кінця масиву на Java завжди буде виключати виняток, який точно повідомляє програмісту. У C ++ вам може пощастить, і він вийде з ладу негайно, але дуже часто він мовчки перекидає інші дані, і помилка не з’явиться набагато пізніше .

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

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

Зауважте, що, за винятком C # / XNA, отримання гри, яку ви записали на консоль, як мінімум вимагає створити компанію з офісом і мати великий бюджет на обладнання апаратних та інших витрат.


Це також винятково вірно, тому що інші мови за межами C ++ дадуть вам відчуття досконалості. C ++ може зайняти сотні годин для того, що може відчувати себе нічим. Вивчення інших мов спочатку дозволяє вам змочити ноги.
Darkenor

Ваші коментарі щодо відсутності помилок в роботі дійсно стосуються C (і так званого коду C ++, який насправді є C). У C ++ є стандартні бібліотеки (і стандартні бібліотеки шаблонів), які мають набагато краще обробку помилок, ніж те, що ви описуєте. C ++ також має бібліотеки, надані постачальниками (наприклад, MFC), які забезпечують гідну обробку помилок.
Джаспер

9

Відмова від відповідальності: Це не відповідає точно на ваше запитання. Однак я спробував (коротко) згадати деякі моменти, які можуть вас зацікавити.

Причина, що ви так багато бачите про C ++, полягає в тому, що C ++ все ще є галузевим стандартом - найпоширенішою мовою для консолей тощо.

Java не часто використовується. Minecraft - досить популярна гра, яка зробила її великою з Java; але графічно це не так вже й добре. Спіральні лицарі непогані - також зроблені на Java, зі значною графікою.

Якщо вам подобається Java, C # дуже схожий за синтаксисом, з тим перевагою, що він може взаємодіяти з C ++ - тому речі низького рівня при необхідності можна робити в C ++. Unity може використовувати C # для написання сценаріїв, а XNA - відмінний вибір.

Знову ж таки, Java широко не використовується. Якщо вам подобається стиль і синтаксис, я думаю, ви знайдете C # дуже схожим, дуже приємним досвідом кодування.

Я сподіваюся, що ваші мрії здійснили, це дуже весело по дорозі :)


8
Багато і неточностей у цих публікаціях. "Погана" графіка Minecraft не (сильно) пов'язана з мовою. Погана продуктивність MC безпосередньо пов’язана з тим, що Java є поганою мовою для ігор, оскільки ВЕЛИЧЕЗНІ продуктивність, а LWJGL є непридатною бібліотекою для великих проектів кодування з тієї ж причини. Але найбільшим фактором було погане кодування та реалізація Notch, яке фіксується ... повільно. C # дає вам всі запаси керованої пам'яті без більшості проблем із продуктивністю Java. Мінусом є те, що C # сильно орієнтований на Microsoft як для ігор, так і для додатків.
MLProgrammer-CiM

2
@EfEs: Я ненавиджу порушувати це вам, але керована пам'ять жахлива для ігор, і люди, які кодують ігри в XNA, повинні витрачати більше часу на управління пам’яттю, ніж люди, які кодують в C ++. Недетермінований характер GC означає, що ви повинні об'єднати практично все і уникати розподілу, як чума, а не спосіб, яким мова повинна була використовуватися.
DeadMG

Ця відповідь не повинна була бути на 100% точною; Я лише наводив приклади, про які я точно знаю. Не соромтеся DV.
зола999

2
@DeadMG Я знаю, що C ++ - це шлях, я просто намагався пояснити, що C # кращий, ніж Java для ігор.
MLProgrammer-CiM

5
Будучи давно розробником C # (не думав розробник ігор), я вважаю, що об'єднання та управління пам’яттю - це великі проблеми для будь-якої погано розробленої системи. Я знаю, що люди з розумом C / C ++ та способами розвитку навряд чи заглиблюються у керовану пам'ять, дизайн та архітектурні шаблони, якими потрібно користуватися та користуватися ними такою мовою, як Java / C #. Що я намагаюся сказати, це не те, що методи C / C ++ або продукти погані, але навіть якщо ви використовуєте більш прості мови з точки зору синтаксису (наприклад, Java та C #), вам все ж потрібен великий досвід, щоб правильно розробити гру. шлях.
Івайло Славов

3

Це не відповідає на ваше запитання; проблеми графіки та консолі, здається, щось, що вам дуже потрібно розглянути. Також GC впливає на продуктивність. Але про що я пишу:

Якщо ви пишете великі, складні програми OO, ви пишете їх у 5 разів швидше на Java, ніж на C ++. Крім того, обслуговування буде значно простішим. Я перейшов, (правда, для неігрового програмного забезпечення), і моя продуктивність зросла. C #, ще одну хорошу альтернативу, навчитися складніше, ніж Java, оскільки її набагато більше. Коли ви це знаєте, ви можете написати код навіть швидше, ніж на Java; він пропонує вам багато хитрощів. Однак я вважаю, що ці хитрощі можуть ускладнити обслуговування. А потім є Java doc, який допомагає бібліотекам Sun і вашому власному старому коду. C # не має нічого подібного.

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


3

Подивіться чувак, проста відповідь на те, "Чи життєздатна Java для ігор Dev" - це очевидно, так. Ви можете використовувати будь-яку мову програмування для створення ігор. Це не означає, що слід .

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

Java робить деякі речі (такі як перевірка меж масиву), які просто запускають повільніше. В цьому оптимізованому прикладі шумового коду Java Perlin автор прокоментував "(доступ до масиву набагато повільніше, ніж доступ до членів)". Такі речі є досить протилежними інтуїтивно зрозумілим походженням із C ++. Але на Яві такі речі є.

Я кажу, перестаньте ухилятися від кулі, вивчіть C ++ і використовуйте її.


1

Ви повинні робити це мовою, яку ви найкраще знаєте, доки не зможете дозволити собі офіційну освіту (бакалавр наук?) З інформатики, наголосивши на ігровому дизайні. Ви можете, можливо, використовувати свою гру, щоб отримати стипендію, особливо якщо ви можете сказати "Я зробив це без будь-якої офіційної підготовки на Java"

Сучасні JVM, навіть ті, що входять до Oracle, мають багато, багато можливостей для вирішення проблем, які тут виникають люди. Ви можете використовувати різні збирачі сміття, щоб отримати більш детерміновану поведінку збирачів сміття. Я не маю великого досвіду роботи з бібліотеками 3D - лише небагато з Java3D - але, здається, ніхто тут не скаржився на них. Тепер аналіз втечі дозволяє заблокувати елізію та набагато швидше / мізерно виділити дуже короткочасні об'єкти.

Проблема полягає в тому, чи ви виберете Java з C ++, вам доведеться навчитися правильно використовувати паралельність і добре розуміти управління пам’яттю. Зрештою, ви можете так само легко накрутити, mallocяк і з чим new. Я не знаю, що таке інструменти для C ++, але інструменти для профілювання Java досить прості у використанні, безкоштовні та інтегровані з IDE. Ви можете використовувати їх , щоб відстежувати проблеми продуктивності та дізнатися .


5
Офіційна освіта в КС вартує джек-лайна за фактичні навички програмування в будь-якій дисципліні. Я б знав, я на третьому курсі.
DeadMG

4
Однозначно не згоден з DeadMG. Закінчивши і вибравши курси, які мені подобаються, CS взяв мої повноваження на розвиток ігор від 10% до 100%. Це не навчило мене користувальницькому інтерфейсу, іконографії тощо, а фактичному, справжньому кодуванню.
зола999

2
@ ashes999: Тоді вам пощастило. Мій курс нікчемний, і я знаю, що є багато інших, які відчувають те саме.
DeadMG

2
@DeadMG важко помітити, коли ти вчишся. Коли ви пропрацюєте пару років F / T та навчитесь іншим безкоштовним навичкам, ви побачите. Я робив. Але, можливо, я просто приділяв багато уваги і намагався застосувати все до свого ігрового хобі-розробника.
ashes999

1
Я б сказав, що це залежить від школи та професора. У мене було кілька чудових уроків програмування, де я навчився тон; і у мене було декілька, де я насправді відчував, що втратив знання, відвідуючи. Справа в тому, мати хорошого професора чи ні. ІМО.
Нейт
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.