Рубрика «Блог компании «Alawar Entertainment»» - 2

Добрый день! В предыдущей статье была рассмотрена общая часть процесса создания игр жанра HOPA (Hidden Object Puzzle Game или «поиск предметов»). В этой статье мы рассмотрим принцип двухуровневой программной абстракции, который является парадигмой основных платформозависимых компонентов нашего движка, и общую структуру нижнего уровня движка. Такой подход позволил нам добиться гибкости в портировании как движка на новые платформы, так и самих игр с одной платформы на другую. А также нам удалось создать:

  • трехуровневую структуру игры;
  • унифицированную подсистему 2D графики;
  • универсальную организацию исходного кода.

В основу программной части Alawar Engine входят 2 библиотеки: SF (Stargaze Framework library) и QE (Stargaze Quest Engine library). SF является ядром всей системы и содержит почти всю платформозависимую реализацию игры. При этом библиотека имеет одну общую ветку исходников для всех платформ. На данный момент SF функционирует под шестью платформами: Windows (XP, Vista, Windows 7), Mac OS X, iOS, Android, PS3 и Windows 8 (в разработке).
Читать полностью »

Привет. Сегодня мы начинаем цикл статей, который познакомит вас с процессом разработки игр на движке Alawar Engine. Первая статья вводная, в ней мы в общих чертах расскажем о создании игрового контента, блочной системе скриптования, с помощью которой из разрозненных частей собирается игра, а также немного о других бизнес-процессах в студии Alawar Stargaze. На текущий момент движок лицензируется внешними студиями, сотрудничающими с Alawar, в разработке находится около 20 проектов. Некоторые проекты, созданные лицензиатами, уже выпущены, например Weird Park.Broken Tune.

Разработка игры начинается с человека, у которого есть идея будущей игры. Да, как обычно без большой и заразительной идеи никуда. Она должна включать в себя общее представление о создаваемой игре, описание игрового мира и персонажей. Из идеи рождается сценарий, в котором прописываются основные сюжетные линии и повороты. Гейм-дизайнеры создают проектную документацию, которая, по сути, является техническим заданием для 3D-модельеров, 2D-художников, аниматоров, специалистов по созданию эффектов, скриптеров, композиторов и других участников команды.
Читать полностью »

Кластерное хранилище в Proxmox. Часть вторая. Запуск
Здравствуйте!

Это вторая часть статьи о работе c кластерным хранилищем в Proxmox (первую можно найти тут). Сегодня поговорим о подключении хранилища к кластеру.

В качестве кластерной системы мы используем Global File System 2.

GFS2 в Proxmox функциональна, но разработчики Proxmox официально не поддерживают ее. Однако ядро Proxmox основано на RedHat-ядре RHEL6x-ветки. То есть поддержка GFS2 в ядре весьма зрелая. Обвязка тоже ведет себя вполне стабильно, за исключением нескольких нюансов, о которых я расскажу позже. Сам пакет gfs2-utils представляет собой практически не измененную (есть лишь патчи в стартовых скриптах на предмет подгона под дебиановскую специфику) стабильную редхатовскую версию gfs2-utils-3.1.3

Пакет gfs2-utils появился в Proxmox в феврале 2012 года. Родной же дебиановский пакет gfs2-tools дико конфликтует (что неудивительно) со всем RedHat-кластером из Proxmox, поэтому до Proxmox версии 2.0 из коробки GFS2 была совершенно неюзабельна.

Итак, огромным плюсом является то, что фундамент для взведения GFS2 в Proxmox уже выстроен.
Читать полностью »

Всем привет!

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

Мы столкнулись с необходимостью автоматизировать сборку и деплоймент на тестовые устройства, когда размер парка устройств превысил два десятка, а количество проектов, одновременно находящихся в QA достигло 30+. При таких объемах деплоймент билда на тестовые устройства с помощью “Build & Run” в XCode начал заметно затормаживать процесс прохождения QA. Было принято решение об автоматизации процесса сборки и заливки билдов на устройства.

Наша обновленная билд-система состоит из трех основных компонентов:

  • Репозитории с исходными кодами проектов;
  • Сервер сборки;
  • Сервер раздачи билдов на устройства.

Процесс прохождения версии проекта от разработчиков до тестировщиков выглядит следующим образом:

  • Разработчик делает коммит версии в репозиторий;
  • Билд-сервер запускает сборку соответствующего проекта;
  • В случае успешной сборки, билд выкладывается на сервер раздачи;
  • Итоговый IPA устанавливается на устройства “по воздуху”.

Система автоматической сборки мобильных приложений Alawar Build System

Читать полностью »

Не так давно, прочитав статью idoroshenko «Почему eval — это не всегда плохо», я задумался, можно ли использовать подход с генерацией тела функции для клонирования объектов. Даже написал небольшую библиотеку для этого. Бенчмарки давали невероятные результаты, но применимость этого подхода ограничивалась лишь множественным клонированием одинаковых объектов.

Поэтому и у меня возник вопрос: неужели в v8 нет другой возможности избежать расходов, связанных со множественным пересозданием скрытых классов? Ведь это составляет основные траты ресурсов, когда мы клонируем объекты. Как оказалось, такая возможность действительно есть: в самом v8 у объектов существует метод v8::Object::Clone. Этот метод клонирует объекты в широком смысле этого слова, то есть собственно объекты, а также массивы, даты, регулярные выражения, функции и т.д., при этом сохраняя все их свойства, в том числе нестандартные (например, именованные свойства массивов) и даже скрытые.

Была только одна маленькая проблема. Этот метод использовался только в недрах node.js, и не был открыт наружу, для javascript'а.
Читать полностью »

Здравствуйте!Кластерное хранилище в Proxmox. Часть первая. Fencing

Хочу рассказать о том, как мы используем у себя Proxmox Virtual Environment.

Я не буду описывать установку и первоначальную настройку — Proxmox очень прост и приятен и в установке, и в настройке. Расскажу о том, как мы используем систему в кластерном окружении.

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

Proxmox работает с двумя типами виртуализации: уровня операционной системы, на основе OpenVZ и аппаратной, на основе KVM. В этих двух типах используется разный подход к утилизации дискового пространства. Если в случае с OpenVZ-контейнерами работа с диском виртуальной машины осуществляется на уровне файловой системы хоста, то в случае с KVM-машинами используется образ диска, в котором находится собственная файловая система виртуальной машины. Операционная система хоста не заботится о размещении данных внутри KVM-диска. Этим занимается гипервизор. При организации работы кластера вариант с образами диска реализуется проще, чем работа с файловой системой. Данные KVM-машины с точки зрения операционной системы хоста могут просто находиться "где-то" в хранилище. Эта концепция замечательно ложится на схему работы LVM, когда образ KVM-диска находится внутри логического тома.

В случае же с OpenVZ мы имеем дело с файловой системой, а не просто с областями данных на Shared Storage. Нам нужна полноценная кластерная файловая система.

О кластерной файловой системе речь пойдет не в этой части статьи. О работе с KVM — тоже. Сейчас поговорим о подготовке кластера к работе с общим хранилищем.
Читать полностью »

Ключ к успеху при разработке free-to-play игр — анализ поведения игроков и постоянный тюнинг игрового функционала на основе статистики. Собрать статистику — это пол дела. Но как превратить гору сырых данных в информацию?

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

Централизованная обработка исключений в Node.JS. Часть 2

Четыре месяца назад я писал о том, как можно удобно ловить исключения в node.js, в том числе и асинхронные, то есть те, которые брошены кодом, который вызван event loop'ом. В той статье я использовал модуль control-block для борьбы с ними, так как стандартный блок try-catch не справлялся.

Как оказалось, примерно в то же время Adam Crabtree выпустил стабильную версию похожего на control-block модуля под названием trycatch.
Читать полностью »

Введение

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

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

Такой подход достаточно прост в реализации, но имеет ряд недостатков. Среди недостатков можно выделить:

  • отсутствие 100% гарантии блокировки при большом количестве потоков;
  • блокировка работает в рамках одного сервера;
  • и самое неприятное – если процесс, который поставил блокировку почему-то её не снял, то остальные процессы так и не смогут получить доступ к этому ресурсу, пока вручную или каким-то другим способом эта блокировка не будет снята.

Когда нужны блокировки?

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

Если вы разрабатываете free-to-play игры, то вам наверняка интересны вопросы, связанные со сбором и анализом статистики. Почему? Потому что статистика – это важная составляющая успеха free-to-play игр.
Цель моего цикла статей – структурировать разношерстную информацию по данному вопросу, пропустить ее через призму нашего опыта и выдать рекомендации по тому,

  • какие показатели стоит отслеживать в играх;
  • какие инструменты анализа могут помочь в работе со статистикой;
  • какие сервисы сбора и анализа статистики существуют с их достоинствами и недостатками.

Читать полностью »


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js