Развивающие игры в Go? [закрыто]


40

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

Некоторые мысли:

  • Согласно golang.org , программы Go "запускаются почти так же быстро, как сопоставимый код C или C ++" - достаточно быстро?
  • Подходит ли сборщик мусора Go для игр?
  • Сколько умственного переоснащения необходимо для создания игр в стране одновременных операций?
  • Go часто называют языком системного уровня, в качестве примера приводится серверное программное обеспечение. Трудно не думать о многопользовательских игровых серверах, услышав это.

Твои мысли?


1
Я бы посоветовал всем, кто не знаком с GO, на самом деле перейти по ссылке, прежде чем отвечать, а не просто отвечать, основываясь на данных «мыслях», которые произносятся, если ваш ответ является общим и не относится к этому языку, тогда я думаю, что это не имеет значения
lathomas64

1
Интересно, можно ли делать игры на ходу (игра): P
RCIX

4
Не уверен, что « Go » считается завершенным (опять же, это человек). Но место для хранения очень ограничено (по крайней мере, если используется регулирующий щит).
Дэвид С. Бишоп

@ DavidC.Bishop Забавно ...
Брайан Ортис

1
Если вы создаете игровой движок go, вы должны убедиться, что вы используете все возможности языка, вместо того чтобы пытаться использовать его так же, как при использовании более «обычного» языка, и копировать то, что уже существует.

Ответы:


34

Мои ответы на ваши вопросы:

  • Язык достаточно быстрый. Более медленный язык Java используется для разработки игр. Даже Python (pygame) используется для разработки игр, и он значительно медленнее, чем Java. Все зависит от типа игры и степени загрузки процессора.
  • Сборка мусора в целом не очень хороша для игр. Тем не менее, Go имеет особенно плохую систему сбора мусора (mark-and-sweep), которая останавливает мир, пока очищает вещи. С этим будет трудно справиться, и это приведет к некоторой частоте смены кадров.
  • Приличное количество умственного переоснащения необходимо для создания игр с подпрограммами. Графика и логика не могут быть параллельными в традиционном смысле; но на более низком уровне части логики являются отличными кандидатами на одновременную обработку программ (например, параллельная обработка решений ИИ, систем частиц и т. д.)
  • Многопользовательский игровой сервер действительно может быть отличным кандидатом на язык Go.

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


6
«особенно плохая система сбора мусора (mark-and-sweep)» mark-and-sweep по сути своей не останавливает мир - в Java, например, имеется параллельный сборщик mark-and-sweep, а Lua долгое время использовал наивный. - и большая часть паузы может контролироваться с помощью тщательно продуманной системы поколений. Тем не менее, Го - это знак остановки и остановки мира. Но первое, а не второе, является проблемой для игр. (В ветке Ruby тоже было несколько странных утверждений по этому поводу.)

1
Нынешняя система Go GC выглядит как заполнитель: «Текущая реализация представляет собой простой сборщик меток и зачисток, но замена находится в разработке» ( golang.org/doc/go_lang_faq.html#garbage_collection ). Варианты замены уже обсуждались; Я не знаю каких-либо твердых решений по этому вопросу.
ЦомКес

1
Джо, спасибо за разъяснения! Я не знал об этом. И да, TSomKes, я видел это, так что мы можем надеяться, что Go в какой-то момент внедрит лучший сборщик мусора.
Рикет

4
Обратите внимание, что приведенный выше ответ устарел, когда речь идет о текущем сборщике мусора Go. Это совершенно другая игра в мяч с Go 1.5. Интересно, насколько это все еще беспокоит.
Джонас

3
И кажется, с ходом 1.8, GC будет уменьшен до 100 мкс одновременной остановки мира. groups.google.com/forum/#!topic/golang-dev/Ab1sFeoZg_8
Доланор

17

Я написал небольшой движок в Go для OSX (используя OpenGl для графического окна). У меня есть некоторый опыт работы с игровыми движками C ++ ( http://morganjeff.weebly.com/ ) и я решил попробовать Go после прочтения о некоторых функциях, которые он предлагает.

Начиная с версии Go 1.1, Go поддерживает большинство функций, которые мне нужны для написания игрового движка (на самом деле игровое ядро, поскольку движок предлагает редакторов, а что нет), включая:

  • Привязка функции-члена (для системы обмена сообщениями)
  • Отражение встроено (полезно для сериализации, поддержки внешних инструментов и т. Д.)
  • Интерфейсы (для реализации полиморфного поведения систем, компонентов и т. Д.)

Некоторые из преимуществ использования Go (для большого проекта):

  • Тестирование встроено в язык (в том числе тесты производительности и некоторые утверждения)
  • Примеры легко добавить к языку (и они составлены для корректности)
  • Код, специфичный для архитектуры, легко добавить (благодаря соглашениям об именах файлов)
  • Профилирование встроено в язык
  • встроенное управление версиями импорта (позволяет добавлять большие двоичные файлы в отдельный репозиторий из исходного кода, сохраняя его версионным и актуальным)

Некоторые преимущества использования Go в целом:

  • Легко рефакторинг кода
  • Go поддерживает многопоточность (в отличие от C ++, который размещал его сверху)
  • супер быстрая скорость компиляции уменьшает необходимость поддержки языка сценариев
  • система статической типизации (интерфейсы удовлетворяются посредством неявной типизации утки)
  • множественные возвращаемые значения, именованные параметры, теговые атрибуты структуры
  • отличные встроенные инструменты и документация
  • управляемый язык

Некоторые недостатки использования Go:

  • Нет макросов или шаблонов
  • Не поддерживает библиотеку более зрелых языков.
  • управляемый язык (указан дважды по назначению)
  • НЕТ ИДЕ

Есть способы получить необработанную память в go (импортировать «unsafe»), и я приведу ссылку на статью, которая показывает, как программа go может быть профилирована по памяти и скорости. В общем, утверждение Go о том, что это современный C, кажется очень верным. Я думаю, что он «умно» разработан (по гораздо большему количеству причин, чем я упомянул), и, что более важно, он хорошо документирован. Движок, разработанный в Go, будет немного отличаться от движка, разработанного в C ++ (к чему я все еще привыкаю), но движок Go решает множество проблем, которые на самом деле не решаются в C ++ (а именно параллелизм, сложность языка C ++ и неправильное использование наследования).

Вот статья, которую я обещал: http://blog.golang.org/2011/06/profiling-go-programs.html

-Джефф


Попробуйте Sublime с GoSublime, он действительно ощущается как IDE, и он гораздо более реактивный, чем многие (если не все) IDE для Java.
Арне

1
Можете ли вы указать, что вы имеете в виду под «встроенным контролем версий импорта», я только опасаюсь тега версии самого языка go.
Арне

@jmorgan какие-нибудь перспективные изменения после Go 1.2 и увидеть предстоящие изменения Go 1.3?
Иллюминат

@Arne: Хороший звонок! Мне действительно очень нравится GoSublime. Для IDE я имел в виду, что для получения визуального отладчика вы должны использовать gogdb (который является отличным инструментом), но он не так хорош, как Visual Studio. Вот что я имел в виду зависимостей пакетов и управления версиями: golang.org/cmd/go/... golang.org/cmd/go/#hdr-Import_path_syntax
jmorgan

@ylluminate: я искренне думаю, что Go становится все лучше и лучше. Теперь он поставляется с тестовым пакетом покрытия, так что вы можете быстро увидеть, что проверено, а что нет. Я обнаружил, что наличие приличного набора тестов делает мою жизнь намного проще ... так что это большая особенность для меня. Похоже, что в Go 1.3 будут улучшены бинарный размер и скорость выполнения (особенно сборщик мусора), так что это здорово.
Джморган

4

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


Определенно дело. Например, я сталкивался с двумя проектами Go / SDL, один из которых, похоже, был заброшен. Я нашел несколько (относительно небольших) игр, которые используют любую из них.
ЦомКес

1
Вы должны обязательно проверить github.com/go-gl, что это не SDL, а хорошая альтернатива, если вы используете OpenGl. Для векторов есть github.com/Jragonmiris/mathgl , но я нашел ошибки там. Go делает это очень легко, чтобы обернуть библиотеки C, нет никакой потребности в make-файлах вообще. Вы также можете импортировать файлы заголовков C и использовать их функции напрямую.
Арне

0

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

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


9
С другой стороны, если вы просто собираетесь жестко закодировать материал в небольшом инди-проекте, чтобы поиграть с новым языком, беспокойство о «наборе инструментов» переоценивается.

2
Я должен не согласиться здесь. Большинство вещей, связанных с разработкой игр, не имеет ничего общего с языком. Задавать вопросы об OpenGL не имеет никакого отношения к тому, что вы программируете на C C ++ Go или даже Java. И, кстати, о каком наборе инструментов ты говоришь? А почему это должно быть несовместимо?
Арне
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.