Каковы большие ограничения VB.Net, которые мешают людям использовать его в качестве языка для разработки игр?
Разработка игр в vb.Net
Ответы (9)
Скорость языков более высокого уровня обычно удерживает их от «серьезной» разработки игр, где главенствуют C и C++. Однако все больше и больше игр раскрывают игровую логику для таких языков сценариев, как Lua и Python.
Я слышал об инди-играх, разрабатываемых в VB, например, серия Zombie Smashers была разработана в VB Джеймсом Сильвой, который недавно сделал игру Посудомоечная машина Dead Samurai на C# .net.
Вы можете изучить платформу Xbox Live Arcade (XNA), выпущенную Microsoft. Вы можете использовать это в VB или C#.
Программистам игр потребовалось много времени, чтобы даже принять C++ вместо C из-за того, что он «медленный». Я считаю, что достаточно скоро эра многоядерных процессоров заставит это медленно исчезнуть, потому что параллельная работа будет намного важнее, чем максимально быстрая работа одного потока.
Имейте также в виду, что в настоящее время большая часть обработки выполняется на графическом процессоре с помощью пиксельных/вершинных/геометрических шейдеров. Итак, мы видим, что довольно продвинутые игры пишутся на языках, которые можно считать «медленными».
Наконец, .NET не медленный. Что делает его проблематичным для разработки игр, так это непредсказуемость сборщика мусора (GC срабатывает во время битвы с огромным боссом и вызывает отставание - не так уж хорошо) и любого маршалинга, который происходит между C # и собственным кодом.
К счастью, при глубоком понимании того, как работает .NET, включая сборщик мусора и среды выполнения, оба этих препятствия можно преодолеть.
Во всяком случае, настоятельно рекомендуется создать прототип игры на управляемом языке, будь то VB.NET, C#, python, ruby и т. д., а затем, если окажется, что он слишком медленный, вы можете перенести его части на С++.
.NET имеет управляемый C++, что делает взаимодействие между собственным и управляемым кодом довольно плавным. Это позволяет при необходимости писать действительно важные части в исходном коде. Но я сомневаюсь, что это так. Сначала самые важные оптимизации будут касаться структур данных, алгоритмов и общей архитектуры.
Основная проблема не в VB.NET, а в .NET Framework.
В частности, разработка игр обычно выполняется на C/C++, где можно добиться максимальной производительности. Платформа .NET для этого не подходит.
При этом есть игры, разработанные на .NET.
Частично это связано с тем, что vb все еще ассоциируется с медленным языком. (Что уже не так верно, как раньше, из-за общности фреймворка .net)
Если честно, это зависит от того, какой тип игры вы разрабатываете, если вы делаете игру с высокой частотой кадров, трехмерной графикой высокого уровня, передовую игру, то вы застряли в написании ее на C или C++, чтобы получить необходимую производительность. Но если вы делаете что-то более похожее на то, что вы видите во многих современных флеш-играх, или даже то, что вы могли видеть в старых играх, то, ИМХО, вы могли бы сделать это практически на любом языке.
Что касается скорости, такие движки, как Visual3D.NET на основе XNA, убедили меня, что это возможно. чтобы получить хорошую производительность от управляемого игрового движка. Что еще более важно, ЦП не кажется узким местом ни в одной из демонстраций, а это единственная часть, на которую оказывает какое-либо влияние использование C#. И даже когда он ограничен процессором, он все равно выдает только 50-60%, поскольку движок все еще достаточно однопоточный, поэтому есть МНОГО возможностей для улучшения сегодняшних двух- и четырехъядерных процессоров, а также завтрашних восьми- и шестиядерных ядер. Я думаю, что оптимизация алгоритмов для хорошего масштабирования в эпоху многих ядер будет важнее, чем используемый язык.
Преимущество использования управляемого языка для всего движка заключается в том, что легко использовать один и тот же язык высокого уровня для игровой логики/ИИ, тогда как нативные движки могут использовать для этого гораздо более медленные языки сценариев.
Использование управляемого языка, такого как C#/VB.NET, может ограничивать возможности процессора, такие как физика, но опять же, меня очень впечатлила полностью управляемая библиотека физики JigLibX для XNA.
Это все C #, но я предполагаю, что это применимо и к VB.NET, поскольку в конце они компилируются в один и тот же IL, если только в компиляторе VB нет некоторых ограничений, о которых я не знаю.
VB.NET ничем не отличается от любого другого языка .NET.
Представление о том, что VB работает медленно, больше не имеет места.
Вот список руководств по VB.NET с XNA (набор инструментов для разработки игр).
Как отмечали другие, .Net не медленный, но есть несколько вещей, которые противостоят ему при разработке игр:
- Недетерминизм сборки мусора
- Низкая переносимость (по сравнению с C)
- Отсутствие зрелых инструментов/библиотек/фреймворков для разработки игр
Что касается использования VB.Net конкретно. Господи, почему? :-)
Вы можете использовать Microsoft XNA Framework для графики и обычное приложение WinForms для хранения всего вашего кода. Просто установите XNA Framework и добавьте ссылку из своего приложения VB WinForms.
Если вы хотите воспользоваться всеми возможностями, которые может предложить XNA, вам потребуется использовать C#, с которым XNA хорошо интегрируется.
Те, кто говорят, что Сеть медленная, ошибаются. Во время выполнения JIT-компилятор преобразует IL в машинный код. Код IL имеет много преимуществ. Вы можете написать игру на C#/VBNET и использовать фреймворк как Monogame или FNA (это повторная реализация XNA). Игра, написанная с помощью monogame/fna, является мультиплатформенной.