Начал изучать программирование, нашел хороший ресурс Javarush,ещё очень люблю игры, кто ж их не любит... И вот подумал, а почему не совместить учёбу с приятным. Загорелся желанием написать небольшую игру, но зато свою, только вот смотрю информацию про геймдев(исключим пока мобильную разработку) и там тесно засели такие вот языки как С++/С#, неужели Java вообще не подходит для написания хороших десктопных оптимизированных приложений?
Если есть опытные джависты, которые пробовали писать не только мобилки на Java, можете подсказать хорошие библиотеки и движки? Или в этой сфере в Java уже всё плохо?
неужели Java вообще не подходит для написания хороших десктопных оптимизированных приложений?
Вот здесь нужно изменить на: "Неужели я не знаю на чем написан используемый мной софт и мои любимые игры?"
Вот так будет более правильно. Это не Ява не подходит, это просто ты пока еще не задавался вопросами о том, на чем написано это или то. Игр на Яве очень много и они никак не выдают себя перед остальными.
Массовый тренд на C++ и C# - это только за счет UE и Unity. Но на самом деле работу в геймдеве можно найти даже на D, который значительно менее популярный чем Ява.
Довольно много компаний зовут заниматься геймдевом на Питоне, Луа, Яве и Шарпе. На этих языках пишется геймплей и бизнес-логика игр. На этих языках пишутся системы инфраструктуры, бекенд, утилиты сопровождения, интеграционный софт. Очень многих вещей конечный пользователь просто не видит. Современная игровая индустрия предлагает очень много работы с самыми разными инструментами, включая и Яву тоже.
Проблема в реалтайме. Обычно когда речь идет об игре то на сцену выходит именно он.
Для современных игр при скорости кадров 60 или выше очень важно чтобы основной цикл
обработки событий приложения работал без задержек. Отклик. Геймеры - народ претензиозный.
Очень быстро чувствуют дефекты игры. Какой им смысл покупать мышку выдающую импульсы
управления с частотой 200 гц, когда вся игровая подсистема будет периодически фризится и лагать.
Java не обеспечивает 60 fps просто в силу своей архитектуры памяти и GC. Это период цикла
в 16 милисекунд. Хотя современные GC типа G1 имеют управляемый таймаут stop-the-world,
тем не менее он не гарантируемый а скорее рекомендательный. Тоесть нельзя совсем
застраховаться от пропусков кадров и продергиваний. Можно скорее говорить о процентиле
чем о минимуме.
Java хорошо работает в обычных веб-приложениях и в back-end процессах потому-что одиночный таймаут
даже в 500 мс никто не заметит. В джобах и фоновых задачах - вообще плевать. Хоть несколько секунд.
Главное чтоб суммарная средняя скорость обработки бизнес-операций была на высоте. С этим вроде
все в порядке.
Вот. Поэтому реал-тайм игры лучше писать на С++/C/Rust. В них есть более-менее гарантируемое понятие отклика приложения. Ну а игру типа квеста или походовой стратегии на Java вполне себе можно написать.
Я не знаю как написан майнкрафт. Но я думаю что автор приложил огромное количество усилий
чтобы GC в его серверной и клиентской части почти ничем не был занят. И такой подход
годится для единичных игр но для майнстрима - скорее всего нет. Геймдев - это тоже бизнес
и он не любит рисков. Нужно так чтоб рилтайм == рилтайм.
Stanislav Mikhaylov, шарпы тоже работают на платформе с GC. Тоесть со сборщиком мусора они также дружат.
Но сама платформа .Net очень хитрая и в ней сложнее провести границу чистого C# кода и кода например Windows. Грубо говоря дотНет пользуется хаком и вызывает из себя функции ОС. Или ваши-же функции написанные на С++. Как после этого классифицировать игру - непонятно. На чем она написана? На гибриде? Может тогда и шарп не нужен. Пишите сразу на С++.
Stanislav Mikhaylov, ты хвалишь ответ человека, который никогда не видел код игрового проекта, не знает как этот код работает и каким он должен быть чтобы быть именно кодом игрового проекта.
Этот человек скор на теории и догадки, но реальности за его словами не больше чем реального опыта в игровой индустрии. Он не знает что такое Java AOT и Roslyn, не знает как работает ART, никогда не видел генерируемый этими механизмами код.
Описанное в его ответе не соответствует действительности уже около 10 лет. Включая и все написанное про C#.
mayton2019, кто тебе сказал что я про что-то забыл?
Ты даже про механику AOT не в курсе, а она у тебя уже с чего-то мертвой оказалась.
Не, ну ты в праве это все писать, тебя же ни кто не останавливает. Просто старайся придерживаться грани разумного. Не в тебе дело и не в моей реакции на твои тексты. А в том, что тебя начитаются и несут потом свет этой твоей истины, отхватывая регулярно по шапке от более радикальных людей, чем я.
Я эту дичь регулярно наблюдаю. Ты же не свои слова и не свой опыт тут вещаешь, у тебя ведь есть куда более массовые источники.
Ты лучше исправься в ответе и дальше.
mayton2019, да не. Но это хорошо что ты поделился своим впечатлением.
Дело в передаче информации. С невежеством людей приходится бороться. Иногда и силовыми методами.
Вот я бы пошел сейчас в теги вебдева теоретизировать как там должно быть правильно с моей т.з. Но я этого не делаю потому что не обладаю достаточной экспертизой. Достаточной - это значит достаточной чтобы без справочника давать рекомендации сотрудникам по бизнес-задачам. Это при том, что и вебдевом я тоже занимался/занимаюсь и что-то где-то знаю.
Ты же себя не останавливаешь вопросами достаточной экспертизы. У тебя много ответов с никакой передачей информации: теории, догадки, предположения.
Если я стараюсь писать только решающие вопрос ответы или не писать их вообще, то у тебя ситуация диаметрально противоположная.
При таких исходных возможность настоящей ситуации является лишь вопросом времени.
Я здесь практически ко всем отношусь одинаково хорошо. И к тебе, на самом деле, тоже. Но и игнорировать все время несостоятельность твоих слов у меня не получается.
Евгений Шатунов, Женя послушай. Я не нарушил правил qna. Я пишу 90% в каментах. Не в ответах. Я вообще не претендую на эксперта. Если ты считаешь что я неправ в ответах - прошу тебя. Добавь замечание. Будь так любезен.
mayton2019, хорошо. Я тебя понял. Перейдем к более конструктивному общению.
Ну и смотри еще. Я не игнорирую свое кураторство в тегах. Если вижу решение без пометки - я пометку ставлю.
Этой игре уже много лет, но геймдев то не стоит на месте, про майнкрафт всегда в Java пишут, а что есть кроме него? И какие движки? Ведь самому с нуля одному движок тяжело, тем более начинающему разработчику. Хотелось бы у опытных людей узнать стек технологий, ведь думаю есть люди, кто тоже начинали с нуля:)
Stanislav Mikhaylov, я вам предлагаю, как начинающему разработчику, написать для начала крестики-нолики, потом тетрис/колумнс и/или какой-нибудь текстовый квест. А там, если не надоест, подумаете о движках и этом вот всем.
Главная проблема в том, что нет инструментов для разработки игр на жаве.
Инструментов нет из-за того что исторически на жаве никто игры серьёзные не делал.
Не делали из-за того что java не хватает возможностей по контролю за памятью, как это есть в том же C++, да и не было никаких больших компаний, которые бы в какой-нибудь момент могли бы её продвигать, как это делала MS с C# и XNA.
Да и сейчас в том же c# у разработчика больше возможностей, чтобы писать более эффективный по памяти код, чем у java
Есть lwjgl и libgdx, для геймдева. Являются по сути обвязками над C/C++ либами. Ознакомьтесь: https://www.lwjgl.org/ https://libgdx.com/
На libgdx можно вполне пилить игры, даже под андроид.