Android, Gradle, Scala и все, все, все

В этой заметке будет описано, как разрабатывать и отлаживать приложения под Android с использованием scala.

Рассмотрим 2 случая:
  • Запуск и отладка приложения на эмуляторе или устройстве из IDE
  • Автоматизированная сборка .apk-дистрибутива без IDE
Для обоих случаев нам понадобятся установленные JDK 6 и Android SDK.

Запуск и отладка приложения на эмуляторе или устройстве из IDE


Перед тем как продолжить, убедитесь, что eclipse, android sdk и ADT настроены и могут нормально взаимодействовать друг с другом.
Следующий шаг – это изменение настроек eclipse. Для компиляции android приложения необходимо около 1.5 Гбайт памяти. Это связано с необходимостью преобразования большого кол-ва scala классов в dx-формат андроида. Для этого надо изменить строку в файле eclipse.ini.
Найдите стоку:
-Xmx384m

И замените её на:
-Xmx2048m

Это означает, что eclipse в процессе работы может использовать до 2 Гб памяти. Если этого не сделать, то при компиляции .apk-файла приложения могут происходить различные ошибки, связанные с нехваткой памяти.


( Читать дальше )

ИИ: мышление есть компиляция

Большая просьба к знающим людям, скажите на верном ли я пути и куда копать?



Меня снова накрывают размышления об ИИ. Продолжаю развивать свою мысль о генерации новой стратегии на основе прожитого опыта. Т.е. есть некий жизненный опыт, который упрощённо можно считать логом команд и изменений состояния системы:
O = { C, S }, где C — это множество наших действий (команд), а S — состояние системы после каждого нашего действия;
C = { c1, ..., cn }, где ci принадлежит множеству команд A = { a1, ..., ax };
S = { s1, ..., sn }, где si = { d1, ..., dy }.

Если проанализировать этот лог, то можно выявить удачные блоки и даже построить из этих данных новые алгоритмы, приводящие к успеху. В общем случае новый алгоритм можно представить в виде функции:
f(p1, ..., pz) = E = { e1, ..., el }, где ei принадлежит множеству команд A = { a1, ..., ax };
f можно представить в виде функции на языке программирования с фиксированным набором параметров p1,...,pz.
Кроме того, есть частный случай, когда z = 0, т.е. функция не параметризированная. Тогда её тело E является всего лишь набором команд, которые могут быть просто фрагментом из лога C.

Задача состоит в том, чтобы разработать метод генерирации E из O. Т.е. преобразование O -> E. Это будет алгоритмом генерации алгоритма.

Утилитка для компоновки спрайтов в один файл

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

Есть утилита, которая называется «SpriteImage Composer», очень старая и глючная. Она делает именно то, что требуется и до недавнего времени я пользовался ей. Она сохраняет коллекцию спрайтов в один большой PNG файл. Однако проблема в том, что эти файлы слишком много весят, если хранить в них длительную анимацию. Например, 4 секундный ролик размером 128x128 в таком формате занимает уже более 1 Мб. Если таких анимаций будет много, то суммарный размер данных для игры уже является неприемлемо большим.

Решение придумал следующее. Для анимационных эффектов не особо важна точность деталей картинки, поэтому её можно сжимать с потерями, т.е. в JPEG. Но JPEG не поддерживает прозрачность. Как же быть? А вот как: собираем все спрайты в большую картинку, а потом сохраняем её в виде двух частей. Первая часть — сама картинка анимаций в виде JPG-файла, а вторая — альфа канал, тоже в виде отдельного JPG-файла. Затем в целевом приложении загружаем оба файла, компонуем в единую картинку с прозрачностью и разбиваем по кадрам. Преимущество такого подхода в том, что суммарный размер пары JPG-файлов в несколько раз меньше, чем единая PNG-картинка.

Именно этот подход использует моя крохотная утилитка, написанная под Adobe AIR. Скачать её и использовать может каждый разработчик, столкнувшийся с этой элементарной проблемой:
http://code.google.com/p/fire-starter/
Программа является OpenSource'ной — берите и делайте с ней всё, что хотите.

Главное окно утилиты

Приглашаются докладчики на Linux GameDev Conference 2. (LGDC#2)


В ноябре анонсирована вторая конференция, посвященная разработке компьютерных игр под Linux. Первая встреча разработчиков проходила в ноябре 2011 года и оказалась достаточно интересной. С её результатами можно ознакомиться по этим адресам: www.mlug.ru/gamedevconf_old и www.mlug.ru/gamedevconf.
Если у Вас есть желание поделиться своим опытом или рассказать про ваши разработки, то зарегистрироваться в качестве докладчика Вы можете по адресу: mlug.timepad.ru/event/11659.

источник: www.mlug.ru/node/74

Синглетоны с "WiFi"

То что сейчас будет написано возможно противоречит каким-нибудь принципам «правильного» проектирования ПО, так что будьте осторожны ))

Предлагаемый подход родился в моей голове чтобы упростить доступ к объектам классов вида «синглетон». Кто не в курсе, знайте, что это классы с объектами в единственном экземпляре и временем жизни равным (или примерно равным) времени работы программы. Классический подход предлагает передавать их по цепочкам в виде параметров и хранить в объектах-клиентах посредством агрегации (в виде ссылок). Такой подход похож на прокладывание сетевых проводов, где устройства взаимодействуют лишь с соседями, прямо или косвенно соединёнными проводами. Прокладывать провода или же обеспечивать каждый раз передачу синглетона по иерархии геморно. Поэтому предлагается устроить нечто похожее на wifi-сеть в проектируемой объектно-ориентированной системе. Сделать синглетоны доступными всем, посредством статической переменной (метода) — почему бы и нет?


( Читать дальше )

Использование примесей при разработке игровой логики

Проблемы

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

Наследование – вариант 1:
Добавим небольшое условие, что каждый объект в игре имеет уникальный ID, по которому можно получить этот объект из общего пула игровых объектов. Также этот ID нужен для БД при сохранении/загрузки данных объекта. Также у каждого объекта есть его позиция в пространстве.
Наследование - вариант 1
Пока нормально. Требуемый функционал описывается данной иерархией наследования.


( Читать дальше )

Перевод Source Multiplayer Networking (часть 1)

Это перевод статьи Source Multiplayer Networking.
Оригинал можно найти по адресу: developer.valvesoftware.com/wiki/Source_Multiplayer_Networking
Вторая часть перевода лежит здесь.

Многопользовательские игры, основанные на Source Engine, используют клиент-серверную сетевую архитектуру. Обычно сервер — это выделенный компьютер, на котором запускается игра и который ответственен за моделирование мира, игровых правил и обработку команд игрока. Клиент — это компьютер игрока, соединенный с игровым сервером. Клиент и сервер взаимодействуют друг с другом путем отправки маленьких пакетов данных с большой частотой (обычно 20-30 пакетов в секунду). Клиент принимает текущее состояние мира с сервера и генерируют изображение и аудио сигналы, основываясь на этих обновлениях. Клиент также считывает данные с устройств ввода(клавиатура, мышь, микрофон) и отправляет эти данные назад на сервер для дальнейшей обработки. Клиенты взаимодействуют только с сервером и не между собой (как peer-to-peer приложения). В отличие от однопользовательских игр, многопользовательская игра сталкивается с новыми проблемами, связанными с пакетным обменом данными.



( Читать дальше )

Перевод Source Multiplayer Networking (часть 2)

Это перевод статьи Source Multiplayer Networking.
Оригинал можно найти по адресу: developer.valvesoftware.com/wiki/Source_Multiplayer_Networking
Первая часть перевода лежит здесь.

Компенсация лагов

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


( Читать дальше )

Лекция «Видеоигры как новый вид медиа: влияние на кинематограф»

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

Среди тем лекции:
• секс, насилие и соответствующая цензура в играх, игровое привыкание;
• авторские игры: существует ли игровой «артхаус» и в каком направлении он движется;
• сюжет и свобода действия в играх: их конфликт и взаимодополнение;
• повествовательность в играх и в кино.

Читает Игорь Коломиец, колумнист Theory&Practice и игродизайнер в Piston Games, читает курс по этой теме в Летней школе ХПМТ (факультет истории искусства РГГУ).

Лекция состоится 16 июня в четверг, в 20:00 на территории дизайн-завода «Флакон» (ул. Б. Новодмитровская, д. 36, м. «Дмитровская»). Вход бесплатный по регистрации. Форма записи здесь: realskill.ru/?p=1789.

Конференция по разработке игр в OC GNU/Linux


18-го (или 19-го) июня, в Москве, на территории ГУ ВШЭ пройдет конференция в форме семинара, посвященная разработке игровых приложений в ОС GNU/Linux: "Linux GameDev Conference".

Хотелось бы отметить, что конференция не ограничивается только одной разработкой под ОС линукс. Будут рассматривать и кроссплатформенный решения.

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

Примерный список докладчиков:

1) Александр Иноземцев (Shikari)
Сайт: linuxgamesdev.blogspot.com
Расскажет как при помощи связки SDL+OpenGl можно написать простенькую игру на Cи.
Расскажет немного о языке Processing, html5 canvas.

2) Александр Седых
Сайты: www.podgames.ru; avikakdumali.ru
Тем доклада:
«Игровая журналистика: создание видеообзоров»
3) Максим Пестун
Темы лекций:
1) Введение в разработку под Андроид:
— установка SDK и настройка Eclipse,
— первая программа,
— основные шаги в программировании,
— рисование графики на экран устройства.
2)Введение в OpenGL

4) Олег Мороз (Qmor)
Расскажет о blender.

5) Big Little Team
Сайт: www.biglittleteam.ru/
Покажут свой проект и расскажут о кроссплатформенности, выборе инструментов для разработки.
6) Чернов Александр
Сайт: a-l-e-x-u-s.ru/
Расскажет о разработке платформонезависимых игр для браузеров в ОС GNU\Linux:
«Проектирование и разработка браузерных игр на JavaScript+(PHP+MySQL)».