Программирование на Python и Objective-C в Mac OS

Программирование на Python и Objective-C под Mac OS и для iPhone / iPod Touch

Хабрахабр разработка игр: Разработка игр — Разработка игр / Хабр

Содержание

2D игра на чистом JavaScript — Разработка игр

В этом пошаговом руководстве мы создадим простую игру MDN Breakout, написанную на чистом JavaScript и отрендеренную на HTML5 <canvas>.

К каждому шагу прилагаются редактируемые live-примеры, с которыми можно поиграть, чтобы увидеть, как должна выглядеть игра на промежуточных этапах. Вы изучите основы использования элемента <canvas> для реализации таких фундаментальных игровых механик, как рендеринг и перемещение изображений, обнаружение столкновений, механизмы управления, а также состояния выигрыша и проигрыша.

Для извлечения максимальной пользы из этой серии статей необходимо иметь средние (или хотя бы базовые) знания языка JavaScript. После прохождения этого урока вы сможете создавать собственные простые браузерные игры.

Все уроки и версии игры MDN Breakout доступны в GitHub:

  1. Создание Canvas и рисование на нем
  2. Движение мяча
  3. Реакция при столкновении со стеной
  4. Управление
  5. Конец игры
  6. Построение поля кирпичей
  7. Реакция при столкновении
  8. Счёт и выигрыш
  9. Контроль мышью
  10. Заключение

Лучший способ получить надёжные знания в области разработки браузерных игр — это начать с чистого JavaScript. Затем можно выбрать любой фреймворк для использования в своих проектах. Фреймворки — это инструменты, созданные на языке JavaScript; поэтому, даже если вы планируете работать с ними, нелишним будет сначала изучить сам язык, чтобы понимать, что именно происходит внутри. Фреймворки ускоряют разработку и помогают справиться со скучными частями игры, но если что-то работает не так, как ожидалось, всегда можно попытаться отладить код или написать собственное решение на чистом JavaScript.

Примечание. Если вам интересно узнать о разработке двухмерных игр с помощью игровой библиотеки, ознакомьтесь с альтернативной серией статей 2D игра Breakout с использованием Phaser.

Примечание. Эту серию статей можно использовать как материал для практических занятий по разработке игр. Также можно воспользоваться набором инструментов Gamedev Canvas Content Kit, основанном на этом уроке, если нужно сделать доклад о разработке игр в целом.

Список сайтов для русскоязычных разработчиков игр

«Где искать полезную информацию по геймдеву на русском языке?» — такой вопрос опубликовал один из подписчиков группы «Геймдев» в Facebook. И получил много полезных ссылок. Не смогли пройти мимо такой подборки и делимся самыми интересными ресурсами.

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

2. GamesJam. Ресурс, где публикуется информация обо всех интересных мероприятиях в геймдеве. И просто площадка для общения с единомышленниками.

3. Блог Сергея Галенкина про игры. Как и в случае с VC, тут дополнительные комментарии не нужны. Все и так знают, кто это.

4. Хабрахабр. Еще один ресурс, про который все в курсе. В разделе про разработку — много прикладной информации из первых рук.

5. Нарраторика. Ресурс для игровых сценаристов от автора «Message Quest» Марии Кравцовой (Кочаковой).

6. Empathy Box. Коллективный блог про теорию геймдизайна и культуру разработки игр.

7. C.O.R.E. Cайт о разработке компьютерных RPG.

8. Gamedev Blogs. Просто много блогов инди-разработчиков. Что-то типа жж для игровых девелоперов.

9. Last Indie Standing. «Описание создания видеоигр и разные мысли вокруг да около…» в блоговом формате.

10. Компьютерные игры как искусство. Обновляется редко, но метко. Тут можно найти, например, анализ «Человека Играющего» и комментарии к нему.

11. Progamedev. Блог об игровой разработке продюсера iLogos Александра Штаченко.

12. Gamedis.ru.  По словам автора блога, тут пишут «о геймдизайне и геймдеве, иногда о краудфандинге».

13. Tiendil. Блог «про разработку ПО, геймдев и прочие радости жизни».

14. Indie Dev. Ресурс тоже обновляется нечасто, но очень качественно. Например, последний пост содержит подробный список иностранных летсплееров.

15. Go Practice. Блог про аналитику и маркетинг мобильных приложений.

16. Личный блог Святослава Торика, эксперта по видеоиграм в Wargaming.net.

17. War&World. Авторский ресурс геймдизайнера Ильи Туменко «о разработке игр: гейм-дизайн, мобильные рынки, игровая индустрия и всякое такое».

18. Блог о геймдизайне Ярослава Кравцова — соавтора Message Quest. В копилке у Ярослава, помимо этой игры, — работа над Skyforge, «Аллодами Онлайн» и Armored Warfare.

19. Аус Хестов. Ресурс ведущего геймдизайнера Nival Анатолия Шестова. Тонна полезной информации. И оформлен красиво.

20. Игролог. Авторский блог инди-разработчика и художника Антона Карлова, автора серии игр Zombotron.

21. И последний по счету, но не по значению — Манжеты Гейм-дизайнера. Слоган сайта: «Как не умереть от ужаса в первый и все последующие рабочие дни на позиции гейм-дизайнера». Нам нравится.

Источник: Facebook 


Есть новость — пишите на [email protected]

Как понять, что вы уже не junior-разработчик — отвечают эксперты

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

Я считаю, что оценивать уровень программиста по количеству лет, которые он потратил, работая в своей области, неправильно. Как минимум потому, что в IT-мире всё быстро устаревает. Думаю, что тяжело назвать middle’ом того программиста, который 5 лет фиксил баги, и при этом ни разу не реализовал новый функционал.

Самостоятельность и уверенность в решении задач

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

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

Категории задач

Конечно, сейчас любой junior, как и я, с уверенностью скажет: «Я уже решал немало задач самостоятельно!». Да, это здорово, но нужно учитывать и сложность решаемых задач. Исправлять баги, писать юнит-тесты, костыли и жмякать на кнопку автоматической сборки билда может практически любой начинающий программист. Но вот самому реализовать новый функционал, улучшить текущую архитектуру или производительность и делать это с умом, по моему мнению, junior вряд ли сможет. Считаю, что это веское основание задуматься о повышении своего грейда до middle.

Проектирование

Когда мне впервые дали написать код на боевом проекте, то я почему-то решил, что чем больше я напишу, тем будет круче. Я написал рабочую библиотеку, которая генерирует документы в PDF из заготовленных шаблонов и приходящих JSON’ов. Со временем понадобилось добавить ещё несколько шаблонов для новых документов. И с добавлением каждого шаблона я начал понимать, насколько громоздким, нечитабельным и неподдерживаемым становится код.

Если бы я изначально продумал архитектуру этой «маленькой» библиотеки так, чтобы не пришлось рефакторить код, то это был бы ещё один поинт в сторону middle-разработчика.

Middle-разработчик не станет лепить новый код класс за классом, а скорее всего начнёт с интерфейсов и будет стараться применять паттерны проектирования там, где они уместны. Кстати, вот хороший сайт с каталогом паттернов.

Если всё же не ясно:

  1. Найдите в компании старшего разработчика, который использует тот же стек, что и вы, и попросите его оценить ваш уровень.
  2. Также можете просить коллег проводить ревью вашего кода.
  3. Узнайте, над чем ещё вам предстоит работать, чтобы дотянуть до middle.

133 канала и чата в Telegram для программистов

CMS

telegram.me/bitrixfordevelopers — Битрикс для разработчиков.

telegram.me/joomlaru — Разработчики под Joomla.

telegram.me/ru_modx — Русскоязычное сообщество MODx.

telegram.me/joomla_russia — Сообщество Joomla.

Базы данных

telegram.me/pgsql — Про PostgreSQL.

telegram.me/dba_ru — Чат о базах данных.

telegram.me/MongoDBRussian — Чат про MongoDB.

telegram.me/PostgreSQL_1C_Linux — PostgreSQL + 1C + Linux.

Другие чаты про админстрирование, разработку и анализ данных

telegram.me/joinchat/ADcH6j8DMoVxtqFI0DASpA — Чат типичных сисадминов.

telegram.me/web_structure — Верстка сайтов HTML/CSS/JS/PHP.

telegram.me/joinchat/ABI4pz6rz2iVzWUzaVqpmA — Чат про нейронные сети.

telegram.me/gamedevtalk — Чат о разработке игр.

telegram.me/protelecom — Чат связистов.

telegram.me/qa_ru — Сообщество тестировщиков.

telegram.me/bigdata_ru — Всё о big data и машинном обучении.

telegram.me/datasciencechat — Чат о Data Science.

telegram.me/MiDevices — Свободное общение обо всём и Xiaomi.

telegram.me/ru_sysadmin — Чат сисадминов.

telegram.me/pro_ansible — Чат взаимопомощи по Ansible.

telegram.me/tgchat — Телеграм-гики

telegram.me/typescript_ru — Чат на темы TypeScript, Flow.

telegram.me/ru_electronics — Чат про электронику.

telegram.me/nocproject — NOC Project.

telegram.me/ru_arduino — Околоэлектронные темы.

telegram.me/ru_voip — Чат на тему VoIP.

telegram.me/ZabbixPro — Разработчики Zabbix.

telegram.me/asterisk_ru — Asterisk и все, что с ним связано.

telegram.me/proelixir — Общение про язык Elixir.

telegram.me/manjarolinux — Разработчики Manjaro.

telegram.me/pro_enterprise — Чат про сервера и хранение данных.

telegram.me/DomainGuru — Чат для обсуждения новостей и событий в доменной индустрии.

telegram.me/ProLua — Чат про Lua-движки.

telegram.me/pro_openstack — Обсуждение openstack, ceph и всего что с этим связано.

telegram.me/ru_raspberry — Чат, посвящённый Raspberry Pi, Orange Pi, Banana Pi.

telegram.me/pro_hosting — Советуем друг другу варианты хостинга, делимся опытом.

telegram.me/telecatethysis — Электроника и программирование.

telegram.me/forgeekschat — Чат для гиков.

Каналы

Для программистов

telegram.me/proglibrary — Библиотека программиста.

telegram.me/devapp — Сообщество мобильных разработчиков.

telegram.me/forwebdev — Канал о фронтенд веб-разработке.

telegram.me/mobilenewsru — Новости и статьи о мобильной индустрии.

telegram.me/webfl — Работа для фрилансеров.

telegram.me/chat_bots_news — Канал о чат-ботах и искусственном интеллекте.

telegram.me/itsecalert — Уведомления об уязвимостях в ПО.

telegram.me/ibach — Канал об информационной безопасности.

telegram.me/AndroidResId — Новости и ресурсы для андроид-разработчиков.

telegram.me/progamedev — Канал о разработке игр

telegram.me/webstandards_ru — Ежедневные новости фронтенда от «Веб-стандартов».

telegram.me/rudevandroid — Андроид-разработка, статьи и библиотеки (на английском).

telegram.me/devops_deflope — Новостной канал подкаста Devops Deflope

telegram.me/ru_python_books — Книги по Питону.

telegram.me/front_end_dev — Ещё один канал о фронтенд-разработке.

telegram.me/networklsa — Строительство сетей (на английском).

telegram.me/deeplearning_ru — Deep Learning.

telegram.me/devbrain — Новости и статьи по разработке ПО.

telegram.me/github_repos — Ссылки на полезные репозитории в Github.

telegram.me/javaswag — Отобранные статьи по Java и JVM.

Для гиков

telegram.me/addmeto — Канал Бобука.

telegram.me/techsparks — Новости хайтека от Себранта.

telegram.me/NeuroScienceRu — Архив материалов по нейронаукам.

telegram.me/nsmag — Официальный канал Naked Science.

telegram.me/brodetsky — Технологии, медиа и общество.

telegram.me/g33ks — События информационных технологий.

telegram.me/beardycast — Новости о гаджетах, науке, играх и кино.

telegram.me/opendatascience — Наука о данных (англоязычный канал).

telegram.me/globchan — Канал о науке и технологиях.

telegram.me/forgeeks — Новости технологий, дайджесты.

telegram.me/themarfa — Лайфхаки из мира технологий, советы по программам, скидки.

telegram.me/funscience — Новостные подборки о технологиях, гаджетах, науке и космосе.

Профессионалы об анимации в Андромеде

На известном сайте Хабрахабр было опубликовано интервью с опытными игровыми аниматорами, которые попытались объяснить, что же все-таки послужило причиной появления в игре таких своеобразных анимаций. Имейте в виду, что Хабрахабр — это, прежде всего, ресурс для разработчиков, а не геймеров.


Большое внимание привлекли проблемы с анимацией в обзорах нового большого проекта Bioware — Mass Effect: Andromeda. Поэтому мы решили, что будет интересно собрать опытных аниматоров и обсудить затруднения, возникающие при работе над анимациями в таких проектах. Большое спасибо Дэниелу Флойду (Daniel Floyd) за модерирование этого «круглого стола». Итак, начнём с представления участников.

Дэн Флойд: Думаю, стоит начать с меня, потому что я здесь в основном в качестве ведущего и буду задавать вопросы умным людям. Меня зовут Дэн Флойд, я один из ведущих YouTube-канала Extra Credits. На этом канале я делаю шоу об игровых анимациях под названием Extra Frames. Кроме того, я аниматор с опытом работы в кино и игровой индустрии, но совершенно не дотягиваю до уровня моих собеседников.
 

Саймон Унгер (Simon Unger): Привет, меня зовут Саймон Унгер. Я аниматор в Phoenix Labs и работаю над новой игрой Dauntless. Раньше я был ведущим аниматором в Electronic Arts, Square Enix и Robotoki. Я учился в таких учебных заведениях, как Gnomon, iAnimate и Vancouver Film School.
 

Гвен Фрей (Gwen Frey): Привет, меня зовут Гвен Фрей, работаю в игровой индустрии уже десять лет. Последняя моя работа — создание небольшой инди-студии в Бостоне и разработка The Flame in The Flood. В проекте я была единственным аниматором и художником по эффектам. До этого я работала над технической анимацией в Bioshock Infinite и DLC, а ещё раньше — над MMO, например, над Marvel Heroes Online. Я участвую в публичных выступлениях о разработке игр, веду подкаст(The Dialog Box) и канал на YouTube (GwenFreyTheTA).
 

Тим Борелли (Tim Borelli): Привет! Я — Тим Борелли. Я работаю с анимацией с 1998 года, и у меня больше провалившихся проектов, чем удачных. Я работал в Volition (с Freespace 2 до начала разработки Saints Row 3), в 5TH Cell (где я в первую очередь учился быть хорошим лидером), а теперь я директор по анимации и видеоэффектам в First Strike Games.



Дэн: Так, давайте начнём с общих вопросов: какие проблемы свойственны вашей работе? С какими ограничениями чаще всего сталкивается аниматор, работающий над видеоиграми?

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

Тим: Проблема номер один заключается в том, что нужно всегда помнить — анимация в играх не заканчивается после завершения процесса анимирования. Чаще всего в этот момент пройдена лишь половина пути. После экспорта анимаций с ними будут взаимодействовать множество разных систем, влиять на их воспроизведение, внешний вид и дух. Время смешивания переходов от одной анимации к другой, системы инверсной кинематики, изменяющие положение ног и смещение относительно земли, аддитивные системы, добавляющие позы в анимации или группы анимаций, изменяя их вид, процедурные системы, которые должны быть идеально настроены — всё это влияет на работу системы. При сбое любого из этих компонентов анимация будет выглядеть совершенно неправильной.
 

Дэн: Все мы видели ролики из раннего релиза Mass Effect Andromeda, и заметили в них довольно большое количество ошибок анимации, особенно в системах навигации и разговоров. Прежде чем переходить к частностям, может кто-нибудь объяснить, как работают системы разговоров? Чем отличается анимирование системы диалогов Mass Effect или Witcher от анимированных сценарных вставок в играх типа Uncharted или Kingdom Hearts?

Тим: Я работал с системами гораздо меньшего масштаба, и даже они были кошмаром для работающих над ними. Вместо создания специальных анимаций для каждой фразы диалога и выбора подходящего актёра озвучки нужно подготовить фонемы («А», «Э», «О», «М-м-м» и т.д.), эмоции (злость, печаль, радость и т.д.) для верхней и нижней частей лица, анимации языка тела (счастье, раздражение, печаль, восторг и т.д.) с разным уровнем интенсивности (очень злой, немного рассерженный, кипящий от гнева и т.д.). Я ограничусь этим, чтобы упростить описание процесса, но обычно над всем этим работает очень маленькая команда аниматоров, а по моему опыту — и вовсе один человек.

Поверх этих данных располагаются процедурные системы, как внутриигровые, так и в редакторе. Эти системы контролируют повороты глаз и головы в направлении цели (когда голова и глаза следят за чем-то интересным), иногда используется автогенерирование синхронизации губ в диалогах, и многое другое, но на этом можно остановиться.

В зависимости от размеров проекта и команды эти данные используются разными способами:
 

  1. Объединяются командой, занимающейся настройкой всех разговоров в игре. Возьмём к примеру фразу: «А потом он украл свинью! ХА-ХА-ХА!», которая будет концовкой шутки. Команде аниматоров нужно подобрать правильные анимации языка тела и выражения лица. Синхронизация губ должна быть уже сгенерирована инструментом, который считывает фразу и создаёт из неё анимацию.
  2. Процедурно соединяются системой, считывающей «метки» данных. Эти «метки» назначаются аниматором или дизайнером для двух аспектов: для языка тела и лицевых эмоций, определяющих их сущность (например, «злость») и для фразы озвучки, чтобы её мог сыграть актёр озвучки. Затем система берёт случайный вариант «злости» и воспроизводит его в нужный момент. Синхронизация губ уже сгенерирована инструментом, которые считывает фразу и создаёт из неё анимацию.
  3. И, наконец, данные можно использовать в качестве основы, которую аниматоры могут настраивать и улучать в 3D-редакторе (например, в Maya). Они выбирают движения, которые нужно использовать, соединяют их вместе, а потом вручную улучшают их.

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

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

Давайте сравним с играми серии Uncharted — в них для таких сцен делается собственная анимация, над которой работает огромная команда аниматоров, художников по видеовставкам, съёмочных операторов и т.д. Они создаются вместе с актёрами озвучки, переснимаются, и всегда готовятся с учётом эмоционального настроя игры.

Дэн: В таких больших проектах неизбежно приходится сталкиваться с реалиями производственного плана. Время и деньги ограничены, и команде нужно планировать, чтобы тратить их как можно оптимальнее. Поэтому без множества прогнозов никак не обойдёшься. Как осуществляется выбор для команд аниматоров? Что входит в процесс графика анимаций видеоигры AAA-класса?

Гвен: [смеётся] Планирование производственного процесса в больших студиях — это довольно замысловатый процесс. После этапа препродакшена продюсер просит команду аниматоров подготовить кучу прогнозов. «Сколько часов работы аниматоров потребуется на анимирование движения двуногого NPC? Сколько часов работы аниматора необходимо для нового двуручного оружия для рук игрока и для всех NPC?» И так далее. Аниматоры отвечают на эти вопросы, исходя из собственных оценок, а потом производственная группа приступает к работе. Производственная группа собирает данные по каждому аспекту, а затем предоставляет директору данные на основании этих оценок: «Мы можем или добавить одно новое оружие в игру, или добавить трёх новых NPC», и всё в таком духе.

С этого момента вы уже не можете управлять графиком. В крупной студии слишком много разной работы, и многие задачи зависят от того, когда будет выполнена предыдущая задача, выполняемая другой командой. Когда каждый является специалистом, выполняющим очень узкую задачу, то возникает множество междисциплинарных зависимостей. Поэтому продюсеры говорят сотрудникам, какие задачи самые важные, и сколько времени есть на их выполнение. Они зарабатывают этим на хлеб, и вы должны им подчиняться (потому что подчинение им — это то, чем вы зарабатываете на хлеб).

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



Саймон: Да, Гвен объяснила всё правильно. Если команда провела этап препродакшена достаточно хорошо (то есть изучила всё неизвестное, создала прототипы, проверила работоспособность базовых геймплейных циклов, и т.д.), то оценки будут близки к реалиям производства. У команды аниматоров могут возникнуть проблемы, когда ей приходится оценивать нечётко заданные дизайн или функцию. Здесь помогает опыт, но в играх часто приходится делать то, чего никто не делал раньше. Очень сложно оценить в часах (или даже днях), сколько времени уйдёт на реализацию. Нужно расположить функции и задачи в порядке приоритета, постараться соотнести их с графиками других отделов и начать с самого важного. Всё, что не умещается в рамки сроков, или вырезается, или реализуется затем в обновлении или DLC.

Дэн: Я хочу затронуть ещё одну тему: анимация в игре (хорошая или плохая), которую видит игрок, является результатом работы не только команды аниматоров. Думаю, что по своему опыту все вы можете ответить об этом по-разному, но в целом игровая анимация зависит от координирования множества дисциплин: от программирования до дизайна. Это действительно командная работа. Как на вашу работу влияют другие дисциплины внутри команды?

Гвен: Я думала над тем, что люди винят за баги аниматоров, хотя на самом деле их скорее всего не в чем упрекнуть. В AAA-проекте такого масштаба большинство мелких вставок аниматоры даже не видят. Создаётся система для дизайнеров, и на них возлагается вся надежда в правильном написании скриптов. Например, создают систему «настроений», чтобы персонаж мог быть счастливым, печальным или злым. Затем дизайнерам поручают создать в сцене настроение для NPC. Дизайнерам дают кучу фоновых NPC с базовым поведением, чтобы расположить этих персонажей в логичных местах. Аниматор в основном занимается сценами с героями (сценами, которые полностью анимируются вручную) или работает с программистами анимации над обеспечением «герметичности» геймплейных систем. Например, нужно сделать так, чтобы при беге в гору персонаж наклонялся вперёд, поэтому аниматор работает над смешиванием различных анимаций движения. Все баги, замеченные в роликах, походят на технические ошибки или ошибки реализации. Я не говорю, что аниматоров не в чем винить: каждый несёт ответственность за обеспечение AAA-качества игры и каждый обязан бить во все колокола, когда что-то идёт не так. Однако я смотрю на все эти ошибки как технический аниматор и думаю, что они похожи на проблемы с инверсной кинематикой и ошибки скриптов.

Тим: Добавлю к тому, что сказала Гвен: в игру всегда вступает аспект создания и настройки персонажа. Команды создания персонажей и анимации всегда должны учитывать различия черт и пропорций лица, доступных игрокам при настройке персонажа. Любые такие настройки могут привести к неидеальной анимации лиц. Просто загуглите «Ugliest character in Saints Row 2», чтобы посмотреть на примеры. Часто в больших играх для заполнения мира NPC используется та же система настройки, и хотя мы стремимся контролировать качество персонажей, создаваемых этой системой, иногда что-то упускается или генерируется случайным образом.

Дэн: Не думаю, что кто-нибудь из нас способен в точности понять, что же не так с анимацией Mass Effect Andromeda (без знания рабочего процесса BioWare и сложностей системы). Но когда вы смотрите эти ролики, то какие причины этих странностей можете найти? Что именно могло пойти не так в системе разговоров и привести к таким ошибкам анимации?

Саймон: Думаю, что прежде чем строить предположения о причинах таких проблем с анимацией, важно объяснить людям, какие цифры стоят за играми этого уровня. Я не знаю точных оценок для ME:A, но мы знаем, что в Mass Effect 3 было более 40 тысяч строк диалогов, а в Dragon Age — около 60 тысяч. Если мы возьмём в качестве среднего 50 тысяч и прикинем, что каждая строка длится около трёх секунд, то в результате получим около 41,5 часа диалогов. Этого хватило бы на 21 фильм. Над большинством фильмов с анимацией работают команды из 70 и более аниматоров. Создание фильма занимает два года или даже больше. Над Mass Effect работали пять-десять аниматоров, и им пришлось создать в двадцать раз больше контента за тот же промежуток времени. Кроме того, надо учесть локализацию игры по крайней мере на 4-5 дополнительных языков.

Понятно, что невозможно разбить такой объём контента на ключевые фазы анимации с приемлемым уровнем качества. Поэтому, чтобы справиться с этим масштабом, студии стремятся как можно больше работы переложить на процедурные системы. Я знаю, что раньше они использовали готовое решение под названием FaceFX. Оно анализирует аудиодорожки и создаёт анимации на основании форм волн, проекции и т.д. На базовом уровне результат может выглядеть как движения роботов, и я подозреваю, что это мы и видим в роликах. Конечно, можно поработать со звуковыми и процедурными инструментами для усовершенствования анимаций. Но глядя на тысячи минут диалогов, которые нужно улучшить, определение «допустимого» сдвигается в сторону, близкую к возможностям команды и надвигающимся срокам. Если бы команда и проект были бы моими, я бы на основании игровых тестов собрал метрики о том, какие сцены смотрят наиболее часто, и отполировал бы их в первую очередь, а остальные оставил бы, как есть.

Гвен: Я согласна с Саймоном, многие ошибки выглядят как неудачное использование FaceFX. Подозреваю, что многое реализовывалось даже не аниматором. Часто этой работой занимается интерн или джуниор, просто копирующий написанный скрипт в FaceFX. Система автоматически генерирует лицевую анимацию на основании букв/звуков введённого текста. В целом это выглядит плохо, и нужно произносить слова фонетически, а не просто вбивать их текст. Но это занимает много времени и ресурсов, которых часто не хватает.

Вы видели баги с «крабьей походкой», когда персонаж быстро бежит? У них есть стандартные причины. Если коллизия с поверхностью не настроена правильно, то персонаж будет немного проваливаться в пол. Однако внутриигровая система инверсной кинематики не ожидает, что персонаж частично проходит сквозь землю, поэтому она поднимает ноги обратно на уровень поверхности. Это приводит к странному повороту коленей. Ещё один вариант причины такой проблемы: система инверсной кинематики обнаруживает несуществующий подъём, или есть какая-то математическая ошибка при опускании таза к земле. Например, если персонаж быстро бежит вверх по лестнице, то система обнаруживает, что он находится на подъёме, и для компенсации опускает таз к земле. Если система ломается и ей не сообщают, что подъём уже закончился, то таз будет постоянно находиться ниже, что приведёт к очень забавному «крабьему» перемещению.

У судорожного движения глаз тоже может быть множество возможным причин. В ME совершенно точно есть система динамического отслеживания глаз, используемая, когда NPC смотрят на движущиеся рядом с ними интересные объекты. Возможно, в некоторых вставках эта система не отключается, и процедурное отслеживание движений глаз борется с запланированной анимацией глаз. Или может быть, объект находится в промежуточном состоянии между нахождением в области видимости (когда он отслеживается глазами) и вне этой области (когда он не отслеживается). А возможно NPC пытается отслеживать два объекта одновременно, и система постоянно получает информацию о нацеливании от двух разных целей?

Тим: Наверно, не стоит забывать, что каждый участвующий стремится вложить в игру максимум, но чем масштабнее игра, тем больше вероятность недопонимания. У аниматора А есть оптимальные планы по использованию анимаций разговора, созданные согласно дизайн-документу, полученному от Сценариста А, но Сценаристу Б в другом городе (или просто в другой части здания) может понадобиться одна из анимаций в задаче, для которой она не предназначалась. Разумеется, он может создать запрос на создание конкретной анимации, но аниматор А, возможно, так его и не увидит из-за приближающегося дедлайна и сортировки запросов по приоритету.

Было бы неправильно винить в этой ситуации кого-то из двух сотрудников. Можно критиковать их работу, и это вполне допустимо — как творцы, мы часто приветствуем критику, ведь это способ совершенствования себя и продукта, который мы предлагаем игрокам. Но в такой большой задаче, как, например, создание системы разговоров, важно знать, что на такую работу нужно много усилий и времени. И если мы не оправдаем ожидания игроков, то не нужно винить себя в этом. Это вполне нормально, мы находимся в самом начале обучения, и результаты со временем будут улучшаться.

И нам нужно, чтобы это время настало.

Дэн: Я хочу закончить тем, что отдам честь команде разработчиков Mass Effect Andromeda. Сейчас важно то, как игра будет принята игроками. Множество людей вложилось в её создание, и это заслуживает уважения. Поздравляю их с достижением финальной черты!

||| Источник: Хабрахабр ||| 

Разработка на JavaScript

Разработка на JavaScript

Книга «Сюрреализм на JavaScript»

В книге содержатся различные рекомендации, советы и идеи касательно разработки сложного фронтенда на JavaScript. Рассматривается архитектура игровых движков и проблемы создания веб-игр и веб-приложений. Так же в книге приведено множество рекомендаций касательно верстки интерфейсов под различные устройства и особенностей разработки на JavaScript под различные платформы.

Книгу можно читать онлайн или скачать в JSON (601 Kb),  PDF (высокого качества 24.2 Mb), PDF (низкого качества 10 Mb), 

СИНЭЛ, Санкт-Петербург, 2014 год

Сборка и сжатие

В докладе идет речь о том, как можно дожимать сайты после сборки (до 15% на GZIP)

Онлайн-доклад, Web Academy, 2016 год

Локализация на JS

Локализация средствами JavaScript. Как мы все делали задом на перед.

Санкт-Петербург, SPb Frontend, 2015 год

Архитектура в играх

В докладе рассматриваются различные алгоритмы создания архитектуры в играх, оптимизации производительности и способы переиспользования кода.

Минск, Frontend Dev Conf, 2015 год

«Шифрование»

Плагин для социальных сетей. Теперь вы можете не только шифровать сообщения, но и принудительно удалять их у собеседника. Подробнее …

Wap. Встройка. Мобильная разработка

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

Екатеринбург, FrontTalks, 2014 год

Классы и фабрики.

Как разобрать и собрать объект с наследованием на прототипах

Доклад о том, как создать множество объектов в JavaScript. В докладе так же затрагивается проблема сборки, разборки и хранения объектов в виде строки.

Минск, Frontend Dev Conf, 2014 год

Разработка кроссплатформенных приложений на JavaScript

Так получилось, что в данный момент существует большое количество техники со встроенным браузером. Поэтому приложения написанные на JavaScript можно считать кроссплатформенными. В презентации рассказано о том, какие моменты надо учесть при разработке приложения на JavaScript, которое планируется запускать на множестве разнообразных устройств.

Екатеринбург, FrontTalks, 2014 год

Разработка игр на JavaScript

Обзорный доклад об игровом движке StalinGrad. Предпосылки к началу работы над движком и его отличительные особенности.

Санкт-Петербург, NextCastleParty, 2013 год

VK: http://vk.com/id286472212
Email: [email protected]
Habrahabr: http://habrahabr.ru/users/bakhirev/
Linkedin: http://ru.linkedin.com/pub/alexey-bakhirev/89/838/7b0/

Разработка казуальных игр с помощью Qt Framework — Блог программиста

Содержание:

  1. Что нужно для выпуска игры?
    1. Чужой негативный опыт. Как не потратить время впустую?
    2. Мой личный опыт
    3. Чужой позитивный опыт
  2. Qt и мобильная разработка
    1. Заготовки для мобильной разработки игр с помощью Qt
  3. Список использованной литературы

1 Что нужно для выпуска игры?

В этом разделе описано почему
я предлагаю использовать Qt Framework.

Многие хотят разрабатывать игры, но не все попробуют это делать. Совсем незначительная доля программистов завершит работу и выпустит хоть что-то, во что можно играть. На самом деле, после того, как я опубликовал ряд материалов по этой теме на блоге, ко мне начали массово писать в социальных сетях с просьбой «научить» или предложением «разрабатывать игры вместе и учиться». Все они получали от меня очень простую задачу — ссылку на одну из моих заметок с описанием заготовки игры типа этой [13] и предложение разобраться с материалом, слегка доработав пример. Ни один начинающий «Game Developer» с этим не справился.

1.1 Чужой негативный опыт. Как не потратить время впустую?

Тот факт, что десятки человек хотят что-то разрабатывать, но не могут осилить 200 строчек хорошо документированного кода говорит о том, что дальше желания у этих людей никогда не зайдет, т.к. в «дикой природе» такой код вообще редко встречается. Чего же этим людям не хватает?

  • они слишком много готовятся и слишком мало пишут код. Это проявляется например в виде просмотра десятков роликов по разработке игр, которые снимают всякие упыри;
  • они не могут определиться с игровым движком и языком программирования. На популярных форумах по программированию за последний год вы найдете десяток «проектов», где хотят писать игры, но для этого решают сначала написать свой собственный игровой движок;
  • они вечно собирают команду таких же ребят. Их беседы не уходят дальше обсуждения все тех же движков;
  • иногда они заводят блог (или используют с той же целью тему на популярном форуме), где начинают планировать разработку своих игр, описывать механизмы взаимодействия объектов в игре и т.д. Я не скидываю ссылки на такие сайты, т.к. читать их не интересно — дальше планов дело никогда не заходит.

Чтобы не стать одним из них нужно начать писать побольше кода на том языке программирования, который лучше всего знаешь. Таким языком может быть и Паскаль и Бэйсик. Надо понимать, что на нормальное освоение С++ или Java уйдет уйма времени и эта задача никак не связана с целью «разработки игр».

1.2 Мой личный опыт

Впервые разработкой игр я занялся учась на четвертом курсе — меня попросили написать игру «Питон» с разными доработками. Игру я писал на C++, а графику реализовал с помощью WinAPI. Это была курсовая, сделанная для какого-то двоечника.

Больше разработка игр меня не интересовала, но в 2012 году я случайно устроился работать в фирму, которая только этим и занималась. Пол года я писал игры на их самопальном движке, мне стало скучно, уволился. Кстати, используемый в этой конторе движок был просто ужасным, хотя с его помощью были разработаны десятки игр. Движок позволял управлять анимацией, и привязываться к таймеру. Привязка всегда осуществлялась с сallback-функции, а логика разрабатываемых игр провоцировала вкладывать одну лямбда-функцию в другую десятки раз. Код получался отвратительный.

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

В 2014 году я устроился на работу Java-программистом. С разработкой игр это связано не было, но пришлось работать и графическим интерфейсом и отображением информации на географической карте. В это время я смог оценить насколько Qt удобнее Swing и прочих библиотек построения интерфейса для Java. При этом в разработке игр огромное внимание уделяется интерфейсу.

На настоящий момент на google play можно найти две мои поделки — казуальные игрушки. Первая — ремейк старой логической игры «Полный квадрат», результаты я описал в статье «Разработка игры на С++, Qt» [1], «Публикация Qt-приложения для Android» [2]. Вторая — логическая игра на развитие памяти по мотивам школьных графических диктантов: «Разработка игры для развития памяти под Android (C++, Qt)» [3]. Каждый раз после завершения игрушки (да и других поделок) я просматриваю код и выбираю фрагменты, которые можно использовать повторно — описываю их на блоге или на форуме [4].

1.3 Чужой позитивный опыт

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

Вы можете поискать и другие подобные истории, но вы точно не найдете среди историй со счастливым концом такую, где автор поступил в ВУЗ, протупил 4 года, получил диплом и … — написал успешный продукт. Эти статьи мотивируют (и правильно) садиться и писать код вне зависимости от вашего образования. Читать параллельно книжки никто не запрещает.

2 Qt и мобильная разработка

В этом разделе приведены ссылки
на материалы, которые помогут вам выпустить свою первую игру

Вся эта длинная преамбула написана чтобы убедить:

  1. не ждать чуда от нашей системы образования и развиваться в выбранном направлении самостоятельно;
  2. писать больше кода с использованием тех инструментов, которые вам уже знакомы.

Во многих школах и ВУЗах изучают язык С++ и, нередко, используют библиотеку Qt. Это объяснимо — библиотека гораздо проще, чем даже STL (имею ввиду части, касающиеся контейнеров, файлов и т.п. — то, что обычно изучают студенты). При этом далеко не каждый студент пытается собрать свое приложение для телефона, но оно с большой вероятностью будет работать точно также как десктопе и это удобно. Кстати, с помощью С++ и Qt написан мобильный клиент 2gis [8], а также Telegram [9].

О достоинствах и недостатках разработки с Qt написано много статей, при их чтении важно учитывать, что с каждым новым выпуском библиотеки решается часть проблем. Бегло просмотрев одну из них [10] можно понять, что в Qt не хватает некоторых визуальных элементов, которые, впрочем, можно реализовать вручную. Однако, стоит ли изобретать велосипед, если можно легально взять готовый в чьем-нибудь репозитории?

2.1 Заготовки для мобильной разработки игр с помощью Qt

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

  1. Графическая сцена [10] — важнейший элемент для разработки игр. Эффективно реализовать ее вручную очень сложно. В Qt она может отображать одновременно тысячи элементов. На ней размещаются игровые объекты:
    1. в Qt имеются встроенный механизм для плавного изменения свойств. Для объектов сцены таким свойством могут быть координаты — в заметке «Qt — анимация на графической сцене» [12] описан соответствующий пример.
    2. в играх часто используется, так называемая, спрайтовая анимация — когда анимированное изображение представляется в виде набора кадров. В заметке «Спрайтовая анимация на QGraphicsScene» [13] приведены классы, позволяющие без особого труда добавить отображение такой анимации в ваше приложение;
    3. почти во всех играх необходимо обрабатывать столкновения объектов — например, если ваш персонах при перемещении должен собирать монеты или стрелять в противников (столкновение пули и противника). В каркасе графического представления также есть готовое решение, пример использования которого приведен в заметке «Обнаружение столкновений объектов на графической сцене Qt» [14];
    4. очень часто в играх требуется загрузить большую карту и отображать ее часть около главного героя, например такой прием использовался в старом Принце Персии, Марио, Робокопе. Реализация такого поведения описана в заметке «Отображение части графической сцены Qt» [15]. Снимок экрана относится к трем последним пунктам:
  • почитав отзывы на Google Play можно заметить, что пользователи нередко не могут разобраться в игре. Особенно в логических играх. Одним из вариантов решения проблемы является вывод справки. Это простая задача, которую в библиотеке Qt можно решить с использованием встроенных классов — справку при этом можно формировать в .html-формате, что очень удобно: «Вывод справки в html формате» [16];
  • если у вас в игре пользователь должен иметь возможность выбрать уровень для прохождения — то вам нужно организовать меню с иконками для уровней. Иконки иногда можно загружать с файлов, а чаще их нужно строить программно. Меню должно иметь возможность прокручиваться пальцем, а также корректно перестраиваться при повороте телефона. Соответствующий компонент предложен в заметке «Меню для телефона. Скролл пальцем. QGraphicsScene» [17];
  • в заметке «Стек виджетов Qt» [18] предложен класс позволяющий очень удобно организовать стек виджетов — переключение экранов в мобильном приложении. Например, когда пользователь начал играть, но затем открыл окно помощи, в нем — окно демо-игры, … — когда он вернется в игру, его прогресс не должен исчезнуть. В заметке «Qt — обработка Android back button» [19] показано как к стеку виджетов приделать обработку стандартной кнопки Android back button.
  • для проигрывания звука в вашем приложении может пригодиться шаблон Singleton, как показано тут: Решение проблемы — QMediaPlayer не проигрывает звук.
  • во многих играх, пользователю необходимо что-либо выбрать — уровень сложности или другие параметры. Однако, на телефоне плохо выглядит стандартный элемент QRadioButton, более удобный для мобильной разработки его аналог описан в статье: «Виджет выбора режима (аналог QRadioButton)«.
  • Вот и конец. Скорее всего список заготовок будет дополняться. Однако, я предлагаю подумать начинающим Game Developer-ам подумать дважды перед тем как начинать писать свои велосипеды или кидаться на изучение новых языков. Если вы не знаете с чего начать — соберите игру типа Сокобана с использованием приведенных выше готовых классов.

    3 Список использованной литературы

    1. Разработка игры на С++, Qt. URL: https://pro-prof.com/archives/1520
    2. Публикация Qt-приложения для Android. URL: https://pro-prof.com/archives/1568
    3. Разработка игры для развития памяти под Android (C++, Qt). URL: https://pro-prof.com/archives/4162
    4. Форум: Использование библиотеки Qt/QML. URL: https://pro-prof.com/forums/forum/programming/cplusplus_programming/qt-library-using
    5. Как я стал андроид-разработчиком без профильного образования, попутно мешая бетон. URL: https://habr.com/en/post/270537/
    6. Как легко и непринужденно написать игру за 2 года. URL: https://habr.com/en/post/279195/
    7. Как я стал программистом. Путь от питерского бездомного до Senior Developer-а за 6 лет. URL: https://habr.com/en/company/veeam/blog/267187/
    8. Оптимизация Android приложений под х86. Опыт 2GIS. URL: https://habr.com/en/company/intel/blog/205622/
    9. Репозиторий Telegram. URL: https://github.com/Kaffeine/telegram-qt
    10. Радость и грусть разработки на Qt под Android (и не только). URL: https://habr.com/en/post/280528/
    11. Рисование на графической сцене Qt. URL: https://pro-prof.com/forums/topic/qgraphicsscene-drawing
    12. Qt — анимация на графической сцене. URL: https://pro-prof.com/forums/topic/qt-qgraphicsitemanimation-example
    13. Спрайтовая анимация на QGraphicsScene Qt. URL: https://pro-prof.com/forums/topic/qgraphicsscene-qt-sprite-animation
    14. Обнаружение столкновений объектов на графической сцене Qt. URL: https://pro-prof.com/forums/topic/qt_collision_detection
    15. Отображение части графической сцены Qt. URL: https://pro-prof.com/forums/topic/qt_part_of_qgraphicsscene
    16. Вывод справки в html формате. URL: https://pro-prof.com/forums/topic/qt-html-tutorial
    17. Меню для телефона. Скролл пальцем. QGraphicsScene. URL: https://pro-prof.com/forums/topic/menu-android-scroll
    18. Стек виджетов Qt. URL: https://pro-prof.com/forums/topic/screensstack-qt
    19. Qt — обработка Android back button. URL: https://pro-prof.com/forums/topic/qt-handling-android-back-button
    20. Бесплатные иконки для ваших игр. URL: https://www.freepng.ru

    Дизайн игры — Визуальное конструирование игр / Хабр

    История Fatal Fight началась в 2015 году. Время выхода на мировой рынок и 5 миллионов загрузок в Google Play Store казалось мечтой каждого разработчика игр.

    В этой статье я расскажу о том, как мы превратили мечту в нашу действительную реальность. Чтобы сделать его максимально понятным, найдите ниже руководство, в котором я расскажу обо всех этапах разработки Fatal Fight и даже многом другом.

    Исследования

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

    Во-первых, мы проанализировали, какие мобильные игры наиболее доступны для поиска в Google Play Store. Оказалось, что топ-3 мобильных игр, которые искали пользователи, были следующими:

    • Головоломки
    • Автомобильные игры
    • Файтинг Игры

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

    В результате в Puzzle and Car Games появился широкий спектр мобильных игр с довольно приятным дизайном UI / UX и другими характеристиками. Однако во время тестирования файтингов картина была совсем иной.

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

    Задавая себе вопрос «Почему?» мы выяснили, что основная причина — геймплей. Взаимодействие между пользователями и играми было сложным. Было неудобно управлять ударами руками, ногами, прыжками и другими возможными движениями по отдельности или даже сразу на смартфоне.

    Java — язык компьютерного программирования общего назначения, который является параллельным, основанным на классах, объектно-ориентированным и специально разработан, чтобы иметь как можно меньше зависимостей реализации / Habr

    SWIG — инструмент для создания кросс-языковых интерфейсы — обеспечивает взаимодействие C ++ и других языков (в нашем случае C ++ и Java).SWIG просто упрощает и автоматизирует межъязыковое взаимодействие; в противном случае вы можете получить тысячи строк рукописного кода JNI — но SWIG покрывает это за вас.

    Это руководство предназначено для новичков (часть 1) и для тех, кто имеет опыт работы в SWIG (часть 2). Я начинаю с базовой настройки и использования и заканчиваю сложными и странными случаями, возникающими при разработке. Последние случаи не такие сложные, скорее обычные для современных языков, которые SWIG пока не поддерживает (как лямбды).

    Это практическое руководство. В отличие от чрезмерно сложной документации SWIG большого объема, это руководство показывает практические случаи. Биты, разработанные мной во время работы над различными проектами или взятые из StackOverflow. Это руководство позволяет быстро приступить к работе над проектом Android Studio и дает практические примеры использования SWIG. Ссылка на проект Android Studio здесь.

    Это руководство для Android. Цель заключалась в том, чтобы упростить внедрение для разработчиков Android.Есть много статей о SWIG, но они в основном предназначены для настольных Java-приложений, и просто попробовать их на Android, чтобы проверить, работает ли решение конкретной проблемы, — это довольно накладные расходы. Хотя это руководство включает проект Android Studio, с которым вы можете сразу же поиграться. Конечно, вся приведенная здесь информация применима к любому Java-приложению.

    Внимание! Я должен вас предупредить, что в настоящее время кроссплатформенная разработка предлагает мощные инструменты. Если вы разрабатываете новое приложение, на практике гораздо экономичнее использовать ReactNative, Flutter или Kotlin-Native, чем SWIG.В то время как SWIG больше подходит для подключения библиотеки C ++ или существующего ядра приложения C ++.

    Продвижение игр — Советы начинающим и опытным разработчикам игр / Хабр

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

    Мы проанализировали языки локализации с точки зрения окупаемости инвестиций.

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

    Каковы самые важные и самые низкие задачи при локализации игры?

    Мы предлагаем сначала задать этот вопрос, прежде чем выбирать языки локализации.Почему? Потому что, в зависимости от типа локализуемой игры, бизнес-целей и ожиданий аудитории, существует несколько уровней локализации.

    Вы можете сделать минимум и остановиться на первом уровне, или вы можете пойти дальше с пошаговой локализацией и максимальным охватом.

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

    Далее, если ваша игра содержит текстовые инструкции, у вас нет другого выбора, кроме как перевести их. Кроме того, другие варианты дизайна также потребуют корректировки с точки зрения цветов, чисел и других местных стандартов.

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

    Написано Alconost

    C ++ — язык программирования общего назначения.Он имеет императивные, объектно-ориентированные и общие функции программирования, а также предоставляет возможности для низкоуровневого манипулирования памятью / Habr

    SWIG — это инструмент для создания межъязыковых интерфейсов — он обеспечивает взаимодействие C ++ и других языков (C ++ и Java в нашем случае). SWIG просто упрощает и автоматизирует межъязыковое взаимодействие; в противном случае вы можете получить тысячи строк рукописного кода JNI — но SWIG покрывает это за вас.

    Это руководство предназначено для новичков (часть 1) и для тех, кто имеет опыт работы в SWIG (часть 2).Я начинаю с базовой настройки и использования и заканчиваю сложными и странными случаями, возникающими при разработке. Последние случаи не такие сложные, скорее обычные для современных языков, которые SWIG пока не поддерживает (как лямбды).

    Это практическое руководство. В отличие от чрезмерно сложной документации SWIG большого объема, это руководство показывает практические случаи. Биты, разработанные мной во время работы над различными проектами или взятые из StackOverflow. Это руководство позволяет быстро приступить к работе над проектом Android Studio и дает практические примеры использования SWIG.Ссылка на проект Android Studio здесь.

    Это руководство для Android. Цель заключалась в том, чтобы упростить внедрение для разработчиков Android. Есть много статей о SWIG, но они в основном предназначены для настольных Java-приложений, и просто попробовать их на Android, чтобы проверить, работает ли решение конкретной проблемы, — это довольно накладные расходы. Хотя это руководство включает проект Android Studio, с которым вы можете сразу же поиграться. Конечно, вся приведенная здесь информация применима к любому Java-приложению.

    Внимание! Я должен вас предупредить, что в настоящее время кроссплатформенная разработка предлагает мощные инструменты. Если вы разрабатываете новое приложение, на практике гораздо экономичнее использовать ReactNative, Flutter или Kotlin-Native, чем SWIG. В то время как SWIG больше подходит для подключения библиотеки C ++ или существующего ядра приложения C ++.

    Как локализовать мобильную игру для азиатского рынка / Блог компании Alconost / Хабр

    В условиях быстрого роста азиатского рынка почти каждый амбициозный ИТ-продукт рано или поздно сталкивается с проблемой локализации для этого региона.А без знания всех его аспектов любой проект по локализации обречен на провал. Вот почему мы в Alconost решили перевести и поделиться с вами статьей о локализации игр для Азии от Plarium, глобального разработчика игр с солидным опытом в локализации игр. Мы нашли здесь несколько полезных подходов, которые также применимы к нашим проектам локализации, и надеемся, что вам тоже понравится это чтение.

    Для западных разработчиков выход на азиатский рынок — это выход в космос, только на 30 мегабайт тяжелее.Локализация игр на японский, китайский и корейский языки требует титанических усилий. Вам необходимо учитывать определенные технические требования и тщательно исследовать рынок и менталитет целевой аудитории. Но если это ваша мечта, продолжайте читать — наш опыт сослужит вам хорошую службу.

    Бесперебойная работа

    В Plarium игры переведены на 12 языков. А у отдела локализации есть 4 разных направления:

    1. Мобильные игры
    2. Браузерные игры
    3. Социальные игры
    4. Неигровые тексты (перевод и адаптация внутренних документов компании)

    Отдел состоит из трех мини-команд от трех до четырех человек, каждая из которых занимается всем языковым пакетом.Каждый товарищ по команде отвечает за до трех языков. Все редакторы и переводчики являются носителями целевого языка и работают с разными командами.

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

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

    Настройка движков

    По статистике американской аналитической компании Superdata, мобильный сегмент составляет 59% азиатского игрового рынка и оценивается в 20 миллиардов долларов.

    Общие ключевые этапы локализации

    1. Исследования. Изучите рынок и исследуйте игровые сообщества. При работе с азиатским рынком языковой барьер может ощущаться особенно остро — азиатские геймеры обычно недостаточно хорошо знают английский, чтобы играть на нем. С Китаем все становится еще сложнее, потому что у китайцев есть собственная версия Интернета с ограниченным доступом, которую люди в других странах не могут использовать.

    2. Культура. Краеугольным камнем локализации является внимание к уникальным культурным и историческим особенностям стран и мировосприятию игроков. В игре Pirates: Tides of Fortune, например, главный антагонист — король Испании. Мы не изменили национальность большого злодея в испанской локализации, и геймеры восприняли это как часть вымышленного сеттинга, не более того. Однако в китайскоязычном сегменте рынка подобная ситуация точно не повлияет на привлечение пользователей.
      Другой пример — осторожность, которую необходимо проявлять с лозунгами и призывами к действию. Например, для Германии мы рекламируем наши стратегические игры без использования немецких слов, обозначающих «вести войну», «атаковать» или «строить империю», несмотря на то, что эти действия являются неотъемлемой частью игр Plarium. За несколько лет работы с переводчиками мы разработали специальные методы, позволяющие избавиться от этих резких фраз.

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

    4. Логика и гибкость . У каждого языка своя гибкость и логика. Например, если вы свободно говорите по-русски, вы легко можете приспособиться к требованиям программного обеспечения. Однако русский язык не такой компактный и лаконичный, как английский. А у немецкого, например, фиксированный наряд.

    5. Уникальность .Новая локализация требует максимально возможной адаптации к существующему интерфейсу и коду. Задача состоит в том, чтобы учесть уникальные характеристики всех поддерживаемых языков. Вы можете попытаться создать универсальный интерфейс, но вам все равно придется настраивать его, чтобы он соответствовал грамматической структуре языка.

    6. История . В мобильной версии нет описания агрегатов. Этот факт не влияет на сюжет, но все же влияет на глубину и сложность игрового мира.Таким образом, при переходе от социальных и браузерных сегментов к мобильному, возникает большой соблазн делать тексты максимально краткими и функциональными. Это происходит из-за широко распространенного мнения, что люди приходят в мобильные игры, чтобы играть, а не читать. Тем не менее, мы не хотим полностью терять богатый опыт, который мы разработали, поэтому мы стараемся использовать квесты, временные рамки и побочные квесты, чтобы представить новых персонажей и погрузиться в историю вселенной. Мы стараемся найти баланс между сюжетом, атмосферой и максимально функциональными текстами.

    Подготовка к запуску — проверка на совместимость

    1. Табу и предпочтения . Япония имеет свое отношение к игровой культуре в целом — она ​​более фанатична и в то же время более банальна. Видеоигры — неотъемлемая часть японской жизни. Японцы в основном играют в игры по дороге на работу или домой, поскольку их поездка на работу часто занимает от двух до трех часов в день. Японцы склонны полностью увлекаться одной тенденцией.У них даже есть целый телеканал, посвященный исключительно видеоиграм. Однако лидирующие игры могут очень быстро измениться. Для стратегических игр, в которые люди играют годами, это интересная задача.
      В Корее в игровом дизайне благоприятны яркие неоновые цвета (особенно розовый). Все должно быть красочным и броским.
      Работая с китайским рынком, не увлекайтесь нереальными, бросающимися в глаза фантомами. И избегайте использования того же оттенка красного, что и на китайском флаге.

    2. Просто правда, просто хардкор . Игры на английском языке популярны в Азии, несмотря на то, что большинство пользователей, в том числе молодежь, не очень хорошо владеют иностранными языками. Локализация очень важна для азиатского рынка, но есть одно предостережение: если ваша игра выглядит явно западной, не пытайтесь прыгнуть выше восходящего солнца и превратить приложение во что-то вроде азиатского насквозь. Вы можете попробовать изменить игру, пока она не станет неузнаваемой, поменяв все, включая механику, и притвориться, что приложение было сделано в Китае, но, вероятно, это не сработает.Как бы вы ни старались копировать азиатский стиль, азиатские игроки почувствуют запах крысы. Геймеры не любят, когда их обманывают, поэтому избегайте диссонанса между дизайном игры и ее текстом.
      Постарайтесь быть максимально честным и не выдавайте игру за азиатский продукт, когда это не так. Локализация должна быть профессиональной, с использованием живого, естественного языка. Геймерская культура очень восприимчива к экспериментам. Нет ничего плохого в том, чтобы оставить западную игру такой, какая она есть, и сохранить ее терминологию.Заимствовать концепции из англоязычных игр — это нормально. Например, нет необходимости искать японский или корейский эквивалент слова «квест», поскольку этот термин знаком азиатским игрокам. Более того, волну глобализации еще предстоит остановить, и нет закона, запрещающего сосредоточение внимания на мировой поп-культуре в играх. В целом пользователи из Азии интересуются уникальной природой западной культуры — это считается прогрессивным трендом.

    3. Технические требования .Азиатские символы тяжелые. В латинских алфавитах каждый символ равен одному байту. В кириллице (используется в русском, болгарском и т. Д.) Каждый символ равен до двух байтов. Но каждый традиционный японский символ может весить до четырех байтов. Полный набор традиционных китайских иероглифов весит около 30 мегабайт. Добавление этого набора в игру сделает приложение немного больше. Мы используем шрифты с упрощенным набором китайских иероглифов, который весит всего около 18 мегабайт.
      В рамках реформы китайской образовательной системы в середине 20 века внешний вид многих иероглифов был изменен, чтобы их было легче запомнить.В настоящее время Китай почти полностью перешел на упрощенную версию, но в Гонконге по-прежнему используется традиционный набор символов. В Stormfall: Rise of Balur мы подготовили две версии локализации игры, которые, разумеется, повлияли на размер приложения: около 36 мегабайт. Позже мы собираемся проверить реакцию публики на обе локации и решить, оставить ли в игре оба набора персонажей. С корейским все немного проще — его система письма представляет собой просто алфавит, маскирующийся под логограммы.

    4. Как найти редакторов и переводчиков . Требования к выбору переводчиков и редакторов для азиатских рынков намного жестче. Для перевода на западные языки кандидату достаточно иметь минимальный уровень локализации и игровой опыт. Что касается азиатского рынка, нам нужны переводчики с особым опытом локализации западных игр и, желательно, мобильных стратегических игр.
      Сначала наши переводы редактировали носители языка, которые играют в наши игры на Facebook.Время от времени мы получали от них обратную связь, например: «Это хороший перевод, но на этом все». Геймеры сказали бы, что атмосфера была передана неточно или что термин был использован неправильно. Например, в казуальных играх есть «жизни», но игроки в стратегии привыкли говорить об «энергии».
      Мы получили отзывы о наших переводах не только от игроков, но и от журналистов и писателей, которые оценили грамотность и качество перевода, а также чистоту языка и баланс между заимствованными терминами и концепциями из целевого языка.В совокупности эти отзывы помогли нам найти подходящих переводчиков и редакторов.

    5. Специальные испытания . Чтобы оценить удобство использования, мы сняли видеоролики наших японских тестеров, играющих в игру. Такой подход оказался более эффективным, чем получение письменного или устного обзора игры. Вежливость имеет первостепенное значение в японской культуре, поэтому японцы часто чувствуют себя некомфортно, давая кому-то объективную оценку или признавая, что есть определенные аспекты игры, которые они не понимают или не любят.Японские тестировщики с большей вероятностью дадут обобщенный, но совершенно бесполезный обзор. Однако на видео все предельно ясно, даже без слов. Наблюдая за движением пальцев игрока по экрану, вы можете увидеть, как он проходил обучение, какие реакции и эмоции испытывали во время игры и чем они были вызваны.

    And We’re Off

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

    О переводчике

    Alconost — глобальный поставщик услуг по локализации приложений, игр, видео и веб-сайтов на более чем 70 языков.
    Мы предлагаем переводы носителями языка, лингвистическое тестирование, облачный рабочий процесс, непрерывную локализацию, круглосуточное управление проектами и работу со строковыми ресурсами любого формата.
    Мы также делаем рекламные и обучающие видео и изображения, тизеры, пояснительные ролики и трейлеры для Google Play и App Store.

    Habrahabr представляет Megamind

    Выбрав «Geektimes» от «Habrahabr», мы активно наблюдали за тем, что происходило на каждом из ресурсов в отдельности и во всей экосистеме наших сообществ. Мы смотрели, как изменилась активность, что стало с трафиком, рейтингами и другими показателями. И хотя не все прошло по плану, в целом результатом мы довольны. «Хабрахабр» стал более цельным и понятным для айтишников, мы убрали с ресурса темы, мешавшие позиционировать проект как исключительно профессиональный ресурс, а «Geektimes» быстро привлек внимание аудитории и активно развивался редакцией и пользователем. усилия.

    Динамика посещаемости Geektimes с момента запуска (уникальных пользователей в день)

    Стоит отметить, что сформировавшийся в результате изменений «Хабрахабр» приобрел довольно хардкорную направленность. Пользователь, оказавшийся на «Хабре», не сразу поймет, что происходит и о чем говорят все эти люди. С одной стороны, замечательно, что «Хабр» стал специализированным и менее попсовым, с другой — хардкорность может отпугнуть часть аудитории, не нуждающуюся в этой сложности.Речь идет о пользователях, которым интересны менеджмент и менеджмент, а не только разработка и программирование.

    Размышляя об этих вещах, к нам пришла другая мысль. А что, если мы продолжим дискотеку и выделим интересующие менеджеров темы из Хабры и сделаем для них отдельный проект? Управление проектами, управление продуктами, вопросы производительности, стартапы, инвестиции и маркетинг в Интернете — все эти темы сегодня интересны широкой аудитории, но в рамках Хабры они не могут развиваться так, как их можно было бы вывести в отдельный специализированный проект.
    ‘)

    Итак, представляем «Мегамозг»

    «Мегамозг» — младший брат «Хабрахабра» в облике «Geektimes». На «Мегамозге» мы использовали структуру и идеологию «Geektimes», без персонализации, как на «Хабре». Эта ветка нашего фреймворка хорошо себя зарекомендовала, мы планируем и дальше активно ее развивать, дорабатывая под каждый проект индивидуально, в зависимости от задач.

    На «Мегамозг» мы скопировали карму, комментарии, публикации, избранное, черновики и все остальное из багажа Хабрахабра каждого пользователя, включая учетные записи только для чтения, и перенесли в новый проект.Как и в «Geektimes» и «Habrahabru», регистрация на «Мегамозг» закрытая и доступна только по приглашениям. Как и раньше, вы можете получить приглашение через Песочницу или от активного члена сообщества.

    «Мегамозг» будет интересен пользователям, интересующимся вопросами управления и контроля. Мы хотим создать ресурс, на котором пользователи будут иметь возможность делиться своими мыслями не о технических, а об организационных и маркетинговых компонентах любой идеи, бизнеса или процесса.Популярные хабы Habrahabra, такие как Project Management, GTD, Freelance, IT Learning Process, Growth Hacking, монетизация и аналитика, переместились в Megamind (полный список перемещенных хабов можно найти здесь). Таким образом, все публикации, размещенные в этих хабах, больше не доступны на Хабре.

    В «Мегамозг» мы добавили новые хабы, чтобы расширить масштаб проекта и дать больше возможностей для аудитории. Новые центры включают в себя следующее: Интернет-маркетинг, управление продуктами, разработка стартапов, аналитика мобильных приложений, управление продажами, повышение конверсии и многие другие.Мы открыты для предложений и готовы создать новые недостающие хабы — просто дайте нам знать.

    Все пользователи и компании, имевшие анкеты или карты на «Хабрахабре», переведены в «Мегамозг». Мы понимаем, что три карты компании — это слишком много. Это произошло потому, что мы решили другие проблемы. Но как только это произойдет, мы обязательно исправим это и предложим решение, которое поможет оптимизировать этот момент. А пока всем активным корпоративным абонентам Хабре (тарифы Гигант и Бизнес) мы дарим бесплатную полугодовую подписку на тот же тариф Мегамозг.Мы отправим соответствующее уведомление в ближайшее время.

    Что дальше?

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

    Прошло несколько месяцев с момента запуска «Geektimes», но мы все еще налаживаем работу над проектом. Для «Мегамозга» тоже нужно время, чтобы наладить все процессы. Отнеситесь с пониманием и проявите терпение. Мы активно работаем и оптимизируем получившиеся проекты в результате недавних разделов. Завершив разделение, мы наконец-то сможем дать обещание: рассылать инвайты в новые проекты, заниматься переносом публикаций, пересчитывать рейтинги, обновлять API и наши мобильные приложения.Планов много, год только начался, впереди много работы.

    Подведение итогов

    Итак, теперь у нас есть три похожих друг на друга сообщества, максимально охватывающих все IT и околотематические темы: два профессиональных — «Хабр» и «Мегамозг», и помогающие расширить кругозор «Geektimes» . Еще у нас есть «Тостер», который помогает решать проблемы и находить ответы на интересующие вопросы, и два сервисных проекта: для поиска удаленной работы и сотрудников в офис.На этом, пожалуй, и остановимся. Это структура наших проектов уже давно. Так выглядит экосистема для ИТ-специалистов, которую мы будем строить и развивать.

    мы в соцсетях

    Хабрахабр: Twitter | Вконтакте | Facebook
    Geektimes: Twitter | Вконтакте | Facebook
    Megamozg: Twitter | Вконтакте | Facebook

    игр niceplay

    Описание

    Мы — инди-студия разработки игр, специализирующаяся на создании небольших высококачественных видеоигр.

    История

    Игровая студия начинала как сольный разработчик игр Михаил Чупраков. Его жизнь всегда была связана с играми. В детстве Михаил создавал свои настольные игры и даже коллекционную карточную игру. Когда он изучил программирование, он сразу же занялся разработкой видеоигр: сначала на Паскале, затем в Delphi, затем он попробовал свои силы в OpenGL.

    Позже Михаил перешел на C #, практиковался в OpenGL и ряде игровых движков.Однажды он даже изучил Action Script 3.0, чтобы разработать арканоид для тестового задания. Когда смартфоны и планшеты стали популярными, он попытался сделать несколько игр на Unity для своего планшета Android. С того времени он был заинтересован в разработке на Unity.

    Когда Михаил учился на 3-м курсе университета, он начал работать гейм-дизайнером в довольно молодой студии разработки игр Playkot, которая занималась разработкой социальных сетей и стратегий среднего ядра, а также пробовала свои силы в мобильных играх.Проработав более полутора лет в Playkot, Михаил покинул компанию и около 6 месяцев работал над собственной игрой Treasure Castle и готовился к магистерской диссертации по CS.

    После этого около полутора лет работал в студии разработки игр Social Quantum гейм-дизайнером (а позже — ведущим игровым дизайнером). За это время он издал Hardmode ON, сделал прототип необычной игры Potionous и разработал большую часть мобильной игры Wizard Swipe.

    После ухода из Social Quantum Михаил продолжил подготовку к выпуску Wizard Swipe и почувствовал вкус жизни инди-разработчика игр.

    Проектов


    Видео

    Суши-аттракцион

    YouTube

    Мастер смахивания

    YouTube

    Hardmode ON

    YouTube


    Изображения

    Для игр с приятным воспроизведением доступно гораздо больше изображений, но мы посчитали, что они будут для вас наиболее полезными.Если у вас есть особые пожелания, свяжитесь с нами!


    Награды и признание

    • «Sushi Ride — Лучшая мобильная игра» — GamesJamKanobu 2017
    • «Sushi Ride — участник Game Lynch» — DevGAMM Moscow 2017
    • «Wizard Swipe — Победитель GamesJam Unity 2015» — Санкт-Петербург, 13 октября 2015 г.

    Дополнительные ссылки

    Изображения
    Загрузите больше изображений игр niceplay — niceplay-games.com.

    Логотипы
    Скачать логотипы игр niceplay — niceplay-games.com.

    Статья о генерации уровней в Hardmode ON
    Читать статью — habrahabr.ru.

    Статья о подводных камнях при выпуске игры в Google Play и App Store.
    Прочитать статью — habrahabr.RU.

    Презентация о разработке мобильной игры Wizard Swipe
    Скачать презентацию и звукозапись (на русском языке) — niceplay-games.com.



    presskit () Рами Исмаил (Vlambeer) — также спасибо этим прекрасным людям

    .

    Добавить комментарий

    Ваш адрес email не будет опубликован. Обязательные поля помечены *