Розвиваючі ігри в Go? [зачинено]


40

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

Деякі думки:

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

Твої думки?


1
Я б радив усім, хто не знайомий з GO, насправді перейти за посиланням, перш ніж відповісти, на відміну від просто відповіді на основі заданих "думок", які говорять, якщо ваша відповідь є загальною і не характерною для цієї мови, то, я думаю, це не має значення
lathomas64

1
Цікаво, чи можна робити ігри в дорозі (гра): P
RCIX

4
Не впевнений, чи вважається " Перехід " завершеним (тоді він знову керується людиною). Але місця для зберігання дуже обмежене (принаймні, якщо використовується плата регулювання).
Давид С. Єпископ

@ DavidC.Bishop Funny ...
Брайан Ортіс

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

Відповіді:


34

Я приймаю ваші запитання:

  • Мова досить швидка. Більш повільна мова Java використовується для розробки ігор. Навіть Python (pygame) використовується для розробки ігор, і він значно повільніше, ніж Java. Все залежить від типу гри та наскільки вона є процесором.
  • Збирання сміття взагалі не дуже добре для ігор. Однак, Go має особливо погану систему збору сміття (маркування і підмітання), яка зупиняє світ, поки він прибирає речі. Впоратися з цим буде складно і викличе щось із рамки зупинки та руху.
  • Пристойна кількість розумового переоснащення необхідна для створення ігор з гороутинами. Графіка та логіка не можуть бути паралельними в традиційному розумінні; але на меншому рівні частини логіки є чудовими кандидатами для одночасних процедур (наприклад, паралельна обробка рішень щодо інтелектуального інтелекту, системи частинок тощо)
  • Ігровий сервер для кількох гравців справді може бути чудовим кандидатом для мови Go.

На мою думку, якщо у вас є досить сильний настрій спробувати писати ігри з мовою, займіться цим. Очевидно, якщо ви думаєте про це, то у вас є пристрасть до цього, а чому б не дотримуватися цієї пристрасті, а не змушувати себе дотримуватися норми? Я міг би сказати набагато більше, але я вже багато чого сказав у своїй відповіді на питання: "Чи Рубі підходить мова для розвитку ігор?"


6
"особливо погана система збору сміття (відмітка та прибирання)" відмітка і зачистка не суттєво зупиняє світ - у Java є паралельний колектор з розмітки, наприклад, Луа довго використовував наївного - і велику довжину паузи можна контролювати за допомогою ретельної генераційної системи. Це, як кажуть, "Go's" - це всесвітній націлювання та ревізія. Але перше, а не останнє - це питання для ігор. (Нитка Ruby також мала деякі дивні претензії щодо цього.)

1
Поточна система Go GC здається дещо заповнювачем: "Поточна реалізація є простим колектором розмітки та зачистки, але заміна працює" ( golang.org/doc/go_lang_faq.html#garbage_collection ). Обговорені варіанти заміни; Мені невідомі якісь тверді рішення з цього питання.
TSomKes

1
Джо, дякую за уточнення! Я цього не знав. І так, TSomKes, я це бачив, тому ми можемо продовжувати сподіватися, що Go в якийсь момент здійснить кращий сміттєзбірник.
Ricket

4
Зауважте, що вищевказана відповідь застаріла, коли мова йде про поточний збірник сміття Go. Це зовсім інша гра з м'ячем з Go 1.5. Цікаво, яка стурбованість це все ще викликає.
Йонас

3
І, здається, з go 1.8, GC буде скорочено до 100µs одночасного зупинки світу. groups.google.com/forum/#!topic/golang-dev/Ab1sFeoZg_8
Доланор

17

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

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

  • Прив'язка функції учасника (для системи обміну повідомленнями)
  • Відображення є вбудованим (корисно для серіалізації, зовнішньої підтримки інструменту тощо)
  • Інтерфейси (для реалізації поліморфної поведінки для систем, компонентів тощо)

Деякі переваги використання Go (для великого проекту):

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

Деякі переваги використання Go в цілому:

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

Деякі недоліки використання Go:

  • Ні макросів, ні шаблонів
  • Немає бібліотечної підтримки більш зрілих мов
  • керована мова (вказано двічі за призначенням)
  • НЕ ІДЕ

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

Ось стаття, яку я пообіцяв: http://blog.golang.org/2011/06/profiling-go-programs.html

-Джефе


спробуйте Sublime з GoSublime, він справді відчуває себе IDE, і він набагато реактивніший, ніж багато (якщо не всі) IDE для Java.
Арн

1
Чи можете ви вказати, що ви маєте на увазі під "вбудованою версією імпорту", я лише тег версії самої мови go.
Арн

@jmorgan якісь перспективні зміни після переходу на 1.2 та бачення наступних змін Go 1.3?
іллюмінат

@Arne: Гарний дзвінок! Мені дуже подобається GoSublime, дуже багато. Що я мав на увазі без IDE, це те, що для отримання візуального налагодження вам потрібно використовувати gogdb (який є чудовим інструментом), але це не так приємно, як візуальна студія. Ось що я мав на увазі про залежність від пакета та версії: golang.org/cmd/go/… golang.org/cmd/go/#hdr-Import_path_syntax
jmorgan

@ylluminate: Я чесно думаю, що Go просто стає все кращим та кращим. Тепер він постачається з пакетом тестового покриття, тож ви зможете швидко побачити, що перевірено, а що ні. Я виявив, що наявність гідного тестового набору значно полегшує моє життя ... тому для мене це велика особливість. Здається, що 1.3 виглядає, що вдосконалення бінарного розміру та швидкості виконання (зокрема сміттєзбірника) буде покращено, так що це чудово.
jmorgan

4

Щось ще варто подумати про те, що оскільки Go все ще відносно новий, можливо, ще не існує прив’язок для багатьох загальних бібліотек, що використовуються при розробці ігор.


Однозначно справа. Наприклад, я натрапив на два проекти Go / SDL, один з яких, здається, покинутий. Я знайшов голу жменю (порівняно невеликих) ігор, які використовують будь-яку з них.
TSomKes

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

0

Не використовуйте Go для розробки гри, це просто альбатрос на шиї. Ланцюжок інструментів для розвитку ігор розширюється настільки глибше, ніж просто мова, якою ви пишете речі, завдяки чому на кожному кроці ви знайдете перешкоди, яких просто не буде, якщо ви просто підете з чимось встановленим.

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


9
З іншого боку, якщо ви просто збираєтеся твердо кодувати речі на невеликому інді-проекті, щоб грати з новою мовою, турбота про "ланцюжок інструментів" завищена.

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