• Локализация приложений для китайского рынка

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

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


      Читать дальше →
    • Как IT-фрилансеру стать предпринимателем. Часть 1

        Всем привет! Это наш первый пост на Хабре, и мы расскажем, как IT-фрилансеру стать предпринимателем.

        Вы узнаете, зачем фрилансеру ИП. Почему ИП лучше, чем ООО. Как зарегистрировать ИП самостоятельно. Что делать потом. Надеемся, опыт, который мы накопили за два года нашего проекта «Я люблю ИП», вам пригодится.



        Читать дальше →
      • Steering behavior. Виды изменения направления движения персонажа на ходу

        При разработке игр часто возникает необходимость реализации следования некоторому маршруту. Например, персонажу нужно проложить путь из точки A в точку B. Допустим рассчитали его по какому-нибудь алгоритму поиска пути, идем. И тут оказывается, что из точки C в точку D идет другой юнит и пересекает нам дорогу и надо бы его обойти. Что делать? Постоянно перестраивать путь – накладно, много лишних вычислительных расходов, когда достаточно слегка изменить направление уже во время движения, чтобы избежать столкновения.
        Виды изменения направления по ходу движения и есть steering behaviors.
        Читать дальше →
        • +22
        • 18.8k
        • 8
      • Пост о маленьких видеоиграх

          Привет, друзья. В этом посте мне бы хотелось рассказать, как я писал маленькие HTML5-игры для конкурса js13k, какие подводные камни повстречались на этом тернистом пути, и что получилось в результате.

          Подводные камни на тернистом пути
          (Подводные камни на тернистом пути — это русло пересыхающей реки, например. Летом в нем растет всякая трава и другие вегетарианские штуки, а осенью начинаются дожди, и всё уходит под воду. Получается терновник вместе с подводными камнями, очень метафорично и травмоопасно.)

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

          Но сначала 77 слов про js13k

          Читать дальше, там самое интересное же
        • Быстрый доступ к map по ключу строке

            В статье «String enum — строковые enum» я писал о том как связывать текстовые представления с enum class — метод хороший но только если все элементы заранее известны, но зачастую бывает что строки являются некими идентификаторами и конечно же заранее не известны, а зачастую будут добавляться позднее и причем без пересборки программы.

            Требования к библиотеке все теже:

            • Кроссплатформенность;
            • Минимум зависимостей;
            • Скорость чтения;
            • Простой синтаксис;


            Пример конфига
            {
                "objects":
                [
                    {
                        "id": "object1",
                        "events":
                        {
                            "event1":{
                                "give": {"object2": 4}
                            },
                        }
                    },
                    {
                        "id": "object2",
                        "events":
                        {
                            "event2":{
                                "give": {"object1": 3}
                            },
                        },
                        {
                        "id": "object3",
                        "events":
                        {
                            "event3":{
                                "give": {"object3": 4}
                            },
                        }
                    },
            
            


            Первая и самая простая идея которая напрашивается это:
                std::map<std::string,script> events;
            

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

            Вторая идея парсить этот конфиг в 2 прохода тогда на 2-м проходе object1, object2, object3 будут уже известны и можно будет записать на них прямо указатели или ссылки. Но если зависимости еще более сложные то такой подход может и не сработать.

            Я предлагаю способ позволяющий существенно сократить runtime издержки подобных конструкций

            Читать дальше →
          • Компоновка с msvcrt.dll в Visual C++: проблемы и решения

              В последнее время я увлёкся темой зависимости от C Runtime в проектах, написанных на Visual C++. Вернее, темой избавления от зависимости от Visual C++ Redistributable, ведь если проект представляет собой небольшую библиотеку интеграции или простейшую утилиту, таскать за собой целый распространяемый пакет не очень удобно.

              На Хабре уже была статья на данную тему, однако я в процессе своих экспериментов столкнулся с некоторыми проблемами. Об этих проблемах и о способе их решения и пойдёт речь.

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

              Заранее прошу прощения за заголовок: я старался перевести фразу «Linking to msvcrt.dll in Visual C++». Статья моя, это не перевод, но название всё-таки проще сформулировать на английском.
              Читать дальше →
            • Линейная алгебра для разработчиков игр

              • Translation
              • Tutorial
              Эта статья является переводом цикла из четырёх статей «Linear algebra for game developers», написанных David Rosen и посвящённых линейной алгебре и её применению в разработке игр. С оригинальными статьями можно ознакомиться тут: часть 1, часть 2, часть 3 и часть 4. Я не стал публиковать переводы отдельными топиками, а объединил все статьи в одну. Думаю, что так будет удобнее воспринимать материал и работать с ним. Итак приступим.
              Читать дальше →
            • Эффект неисправного монитора для текста, картинок и SVG

              • Translation
              • Tutorial
              Эффект Glitch Лукаса Беббера выглядит очень круто — как будто вы смотрите на текст на старом мониторе, который слишком часто роняли на пол и у него «плавает» вертикальная синхронизация и сведение.

              Реализация этого эффекта на CSS выглядит вполне убедительно. Мне пришлось немного поломать голову, чтобы выяснить, как он работает, и теперь я хочу объяснить это вам. Кроме того, я воспроизвёл этот эффект не только для текста, но и для растровых изображений и SVG, а так же написал несколько примесей Sass, чтобы облегчить работу с ним.


              Читать дальше →
            • Трепещи, Oculus VR

                В в DIY хабе уже есть несколько публикаций об изготовлении очков виртуальной реальности. Присоединюсь.



                Возможно кто-то читал мой песочный пост про электрофицированную кресло-качалку. В той статье я выразил желание скрестить получившееся устройство с очками виртуальной реальности. Как ни странно, все не остановилось на выражении желания. Я бы, конечно, предпочел попользовать Oculus Rift, но это слишком большой удар по бюджету провинциального грузчика, тем более удар, не поставляемый в Украину. Кроме того, осведомленные люди говорят, что в нашем «мегаполисе» искать этот чудной девайс бесполезно. Ну что же, достану из коробки классические буханку черного хлеба, отвертку и нитки, и вместе посмотрим на множестве фотографий что из этого можно получить.
                Любопытно
              • 3D-режим в Diablo 2

                • Translation
                Это перевод поста Don't Starve, Diablo — Parallax 7 из блога Simon Schreibt от 25 февраля 2014 года.
                Осторожно, тяжелые гифки.

                В 90-х игры начали свое движение от 2D к 3D. Если бы НЛО тогда посетило землю, пришельцы решили бы, что используемые в то время низкополигональные модели без всякой фильтрации никому не нужны, и уничтожили бы Землю.

                Со временем они, конечно, научились бы тому, что делало людей особенными: даже в эру 2D у них было невероятное желание рендерить в 3D, даже при том, что тогда это было просто невозможно!
                Читать дальше →
              • Семейный бизнес в сфере IT. Мои три золотых правила

                  image

                  Предисловие


                  Помните мою предыдущую статью? В ней я рассказала о том, как мы с мужем основали собственный бизнес. Точнее, муж основал, а я чуть позже к нему присоединилась.

                  То, чем мы тогда занимались, очень сложно назвать бизнесом. Это скорее была работа в паре. Мы никогда не договаривались: ты делаешь это, а я это. Разделение обязанностей сложилось само собой.

                  Вы спросите: «Кто же в вашей команде главный?». Скажем так, мы оба прекрасно понимаем, кто главный. Но вслух это не обсуждаем, потому как один из нас может обидеться, а вторая слишком много о себе возомнит…

                  Конечно я шучу. Все решения принимаются вместе. Я не буду врать, что мы всегда мыслим одинаково и никогда не расходимся во мнении. Однако, мы научились слушать и понимать друг друга. Научились договариваться. Я думаю, это важно для любых бизнес-партнеров, независимо от того, являетесь вы семьей или нет.
                  Читать дальше →
                • Создание игры на ваших глазах — часть 7: 2D-анимации в Unity («как во флэше»)

                  • Tutorial
                  В этой статье поговорим о 2D анимациях в Unity. Я расскажу о своем опыте работы с родными анимациями в юнити, о том, насколько тайм-лайны похожи на флэшевские, об управлении анимациями, event'ах, вложенности, и о том, как художник справляется с анимированием.

                  Для начала, немного теории.

                  В Unity есть две сущности:

                  1. Анимация (то, что отображается в окно «Animation»)
                  2. Mechanim дерево анимаций (то, что отображается в окне «Animator»).



                  Ниже я немного расскажу, что это такое и как нам может приходиться (или не пригодиться).
                  Читать дальше →
                • Quad-engine. Свой 2D-движок. Когда приперло со всех сторон

                    Предисловие.


                    Было начало 2010 года, когда я расстроился при просмотре очередного фреймворка с поддержкой Delphi. В тот момент я искал замену уже сильно устаревшему и заброшенному PowerDraw. Как говорится, тоже самое, только с перламутровыми пуговицами. Пересмотрев всё, что было из 2Д, я так и не нашел искомого. То не было шейдеров, то черезчур нагроможденный с точки зрения кода, то вообще какой-то убогий. А душа просила простоты использования и шейдеров.

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



                    Под катом прилично картинок.
                    Читать дальше →
                  • Описание ММО компонента в составе игрового движка «Tornado»

                    Долго искал открытый и бесплатный ММО движок в интернете. Либо это был откровенный бред, либо платный проект. Вообще, этих движков среди компаний, делающих ММО РПГ, полно, но каждая компания пишет свой движок. Единого стандарта нет. Пришлось самому его писать — и я таки сделал это. Долго продумывал интерфейс библиотеки. Потом также долго воплощал в жизнь. Потом допиливал безопасность (AES и RSA на основе OpenSSL, проблема «Man-in-the-middle» устранена). Движок получился кроссплатформенным (работа с сетью благодаря boost). Обмениваться пакетами можно как с помощью TCP, так и UDP.
                    Читать дальше →
                  • 3D-мультфильм с нуля

                      Здравствуй, дорогой Хабр

                      Впервые собрался написать тебе, ведь есть что рассказать и, наконец, появилось немного времени. Лейтмотивом сегодня будет такая тема, как обучение 3D-анимации.
                      Точка невозврата скрылась за спиной года три назад. Тогда небольшая группа мечтателей, пять лет в режиме хобби занимавшихся мультипликацией, приняла решение сделать из этого свою профессию. Это сейчас нам уже почти три года, и добрая дюжина человек производит 3D-анимацию: детские сериалы и рекламу для компьютерных игр. А тогда, мало понимая, как делаются мультфильмы, собралось шесть человек.
                      То, что мы никогда до этого не делали 3D-анимацию, и то, что от первоначального состава никого сейчас не осталось — это история отдельная. А сегодняшняя — о том, как, практически с нуля была создана в Казани анимационная студия, полностью работающая на свободном программном обеспечении.
                      Читать дальше →
                    • Проблемы современных рассылок

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

                        Спам


                        Куча писем попадает в спам. Даже если они таковыми и не являются. 30% сервисов, в которых я регистрируюсь отправляют подтверждение регистрации мне на почту, но я ловлю его в спаме. Но это я. Да, я читаю папку «спам». Складывается впечатление, что многим просто плевать на потенциальных клиентов. Куда смешнее получать подобные письма в спам от компаний, предоставляющих, например, услуги рассылок. Каламбур.
                        Читать дальше →
                      • Папа, а почему на ноль делить нельзя?

                        Моя трёхлетняя дочка София в последнее время частенько упоминает «ноль», например, в таком контексте:
                        — Соня, вот ты вроде сначала не послушалась, а затем послушалась, что же получается?..
                        — Ну… ноль!

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



                          Доброго времени суток читателям. Предоставляю вашему вниманию список ресурсов и книг, которые могут быть полезны гейм-дизайнеру или любому, кто интересуется данной тематикой. Сразу скажу, что почти все ресурсы на английском языке, т.к. русских аналогов весьма мало, а полезных и того меньше.
                          Читать дальше →
                        • Применение XSLT преобразований для конвертации XAML между различными платформами

                            Платформы WPF и Silverlight используют язык разметки XAML для описания элементов пользовательского интерфейса, шаблонов и стилей. Если вы разрабатываете одновременно под разные XAML платформы, то естественно, возникает желание иметь общие файлы разметки для этих платформ.

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

                            WPF2SL слишком специфичен, чтобы быть полезным широкой публике, поэтому мы не планируем его публиковать. В этой статье я расскажу об особенностях XSLT преобразований применительно к разметке XAML и о некоторых сложностях и особенностях, с которыми мы столкнулись.
                            Читать дальше →
                          • Signed Distance Field или как сделать из растра вектор

                              Речь сегодня пойдёт о генерации изображений с картой расстояний (Signed Distance Field). Данный вид изображений примечателен тем, что фактически позволяет получить «векторную» графику на видеоускорителе, причём даром. Одной из первых данный метод растеризации предложила компания Valve в игре Team Fortress 2 для масштабируемых декалей в 2007 году, но до сих пор он не пользуется особой популярностью, хотя позволяет рендерить прекрасного качества шрифты, используя текстуру всего 256х256 точек. Данный метод прекрасно подходит для современных экранов высокой чёткости и позволяет серьёзно сэкономить на текстурах в играх, он не требователен к железу и прекрасно работает на смартфонах.



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

                              Как же создавать такие изображения? Очень просто, ImageMagick позволяет сделать это одной командой:

                              convert in.png -filter Jinc -resize 400% -threshold 30% \( +clone -negate -morphology Distance Euclidean -level 50%,-50% \) -morphology Distance Euclidean -compose Plus -composite -level 45%,55% -resize 25% out.png
                              

                              На этом можно было бы поставить точку, но так полноценного топика не получится. Что ж, под катом — описание быстрого алгоритма расчёта SDF, пример на C++ и немного шейдеров для OpenGL.
                              Читать дальше →