С чего начать, если я хочу написать C ++ 2d игру? [закрыто]

17

Я веб-разработчик на C # и хочу расширить свой набор навыков и повеселиться во время работы. Я знаю некоторые основы C ++, и я хотел бы написать для себя простой 2D-движок / игру, используя C ++. Какие еще библиотеки или SDK мне нужны, и где я могу найти учебники и информационные ресурсы для дальнейшей работы?

Я уже смотрел в XNA с C #. Для этого есть много ресурсов, но я бы предпочел использовать продукты не Microsoft. Смысл этого в том, чтобы немного повеселиться и стать лучшим программистом.

Пожалуйста, обратите внимание, что я не спрашиваю о лучшем месте для начала. Я просто прошу на место , чтобы начать.

Спасибо за любую помощь!

quakkels
источник

Ответы:

27

Стандартное начальное место (по моему опыту) для разработчика игр C ++ - SDL . Вы должны сделать свои руки немного грязнее, чем XNA.

Если вы хотите попробовать что-то немного более высокого уровня, то я бы предложил SFML . Он выполняет некоторые из самых простых задач для вас, но вы все равно должны следить за использованием памяти и т. Д.

Майк Клак
источник
1
Я посмотрю на них. Моя самая большая проблема с XNA состоит в том, что это было настолько просто, что я не чувствовал, что действительно изучал вещи более низкого уровня, которые я заинтересован в исследовании.
Quakkels
6
У SFML хороший дизайн, но он все еще немного глючит и находится в процессе редизайна API - я бы не стал использовать его для более сложных игр, пока следующий выпуск не будет хорошо отлажен.
Битгарден
Если вы хотите что-то более сложное, чем SDL, попробуйте ClanLib . Как и XNA, он поддерживает аппаратное ускорение, но также работает и в Linux, а также в 2D.
ChrisC
2
Вы также можете пойти прямо к горлу - OpenGL - мой личный фаворит (вы можете обернуть его с помощью SDL или SFML)
ultifinitus
9

Я бы предложил использовать SDL . Прошло много времени, поэтому документация и поддержка довольно хороши, и это один из самых простых способов, которыми я знаю, получить поверхность для рисования на экране. Это даст вам возможность практиковаться в написании классов на C ++ (так как вы, вероятно, захотите много обернуть вызовы функций SDL C), а также даст вам некоторый опыт использования указателей и ссылок и некоторого базового управления памятью. Управление собственной памятью является одним из основных различий между C ++ и C #.

Стив Блэквелл
источник
9

Лично я бы выбрал Allegro 5 по следующим причинам:

  1. Он имеет систему сборки на основе CMake. Это намного проще, чем большинство систем сборки, работать на разных платформах. Это кажется незначительной вещью, но в целом это очень важно. Это делает сборку библиотеки намного проще.

  2. SFML все еще находится в значительном движении. 2.0 - довольно существенное изменение. Принимая во внимание, что Allegro уже претерпел значительные изменения с версией 5, и теперь все дело в стабильности.

  3. Он охватывает модульность иначе, чем SFML. С SFML вы запрашиваете конкретные компоненты, но получаете их все. Если вы попросите графический компонент, вы получите весь графический компонент. С Allegro 5 вы всегда получаете графический компонент. Но если вы не хотите использовать растровые загрузчики Allegro, вам не нужно; Вы можете использовать свой собственный.

  4. У него очень хорошая документация. SFML использует документацию в стиле Doxygen, но даже она довольно спартанская. Принимая во внимание, что Allegro 5 является более всеобъемлющим, с функциями, сгруппированными в зависимости от конкретных систем, которые они охватывают. Это не идеально, но лучше в целом.

  5. Они достаточно умны, чтобы не пытаться делать потоки. В C ++ 11 / Boost.Threads, широко доступном или готовом к использованию, использование другой обертки потоков может быть не просто проблематичным: это может быть опасно для правильной работы вашего кода.

Николь Болас
источник
Почему вы бы предпочли / предложили Allegro, а не SDL или SFML?
Quazi Irfan
@iamcreasy: если вы настаиваете.
Никол Болас,
Вы все еще не упоминаете SDL ...
Инженер
@NickWiggill: SDL имеет потоки и системы сборки для конкретной платформы. Я не чувствовал необходимости называть это чем-то конкретным.
Николь Болас
@ nicol-bolas, ты не упомянул о минусах Аллегро. Как очень небольшое количество учебных сравнений.
Quazi Irfan
4

Я думаю, что фантастическим местом для начала является LazyFoo . Это поможет вам работать с SDL быстрее, чем в любом другом месте, которое я видел. Я бы порекомендовал быстро войти в OpenGL (как только вы его освоите), потому что вы получите гораздо больше отдачи от своего курса программирования - с аппаратным ускорением. Если вы идете по этому пути, я рекомендую это руководство .

ultifinitus
источник
2

Я бы порекомендовал SFML, если вы используете c ++. Он быстро выведет вас на экран, и использовать его вместе с игровым кодом C ++ просто.

jmp97
источник
2
  • SFML - ребенок в группе, но потенциально легче всего использовать из того, что я прочитал.
  • SDL - средняя дорога. Очень зрелая библиотека, разумная, обычно лаконичная, если время от времени немного загадочная, и очень распространенный выбор. Настройка форматов отображения может быть чем-то вроде ублюдка, я воспользовался учебными пособиями lazyfoo, чтобы помочь в этом.
  • Аллегро - гериатрический, он существует с Atari ST дней. По этой причине большая часть кода 2D-рендеринга (который, я думаю, есть только в Allegro 4) чертовски быстр, поскольку логика была построена для систем с более низкими характеристиками. Лично я не нахожу это очень интуитивным, даже учитывая документацию.

Учитывая, что в наши дни OpenGL ускоряет двумерную сторону, не так важно иметь доступ к быстрым программным средствам визуализации, которые есть у Allegro и SDL (или были в более ранних версиях). Однако когда я выбираю библиотеку, я сосредотачиваюсь на зрелости проекта, пользовательской базе и документации больше, чем скорость (при условии, что скорость разумна), и я бы сказал, что SDL и Allegro выигрывают на этих фронтах. SDL также выпустила тройные титулы AAA, такие как Civ: Call to Power.

инженер
источник