- Разница между браузерными и мобильными играми: средства ввода и условия использования
- Средства разработки, предоставляемые создателями мобильных платформ
- Анализ движков на мобильных платформах. Преимущества и недостатки существующих на рынке движков
- Почему мы остановились на Corona: перенос графики из Flash в Corona, средства (JSFL, приложение на AIR), экспорт анимированных объектов и кукольных персонажей
- Изменения в дизайне игры: мини-игры, айфонизация интерфейса и игрового процесса
- Подводные камни в разработке: In-App purchases, отсутствие доступа к нативному API, компиляция и запуск на различных устройствах
- Платежи на мобильных платформах
How NOT to do showcase events: Behind the scenes of Midnight Show / Andrew Ko...
Бубер Илья (Progrestar) - “From Flash to Mobile. Портирование flash-игры на мобильные платформы: iOS и Android”
1.
2. Flash to Mobile. Портирование Flash-игры на мобильные платформы Илья Бубер. Руководитель проектов, Progrestar Inc. www.progrestar.com Twitter: @Progrestar
4. Копай в Соц. Сетях 6 млн довольных пользователей из СНГ, Европы и Мира Миллионы собранных коллекций Тысячи сломанных от бесконечного кликанья мышек.
7. Часть 1. Выбираем Framework Обзор iTorque2D Плюсы Недостатки WYSIWYG редактор Простой скриптовый язык Исходники Возможность компиляции под PC/Mac Немного успешных iOSприложений Редкие обновления Умирающее коммьюнити
8. Часть 1. Выбираем Framework iTorque2D –Зачем его можно использовать? Для платформеров Для людей, плохо владеющих программированием Если собираетесь выпускать десктоп-версию http://www.garagegames.com/products/torque-2d/iphone Искать тут:
9. Часть 1. Выбираем Framework cocos2D Плюсы Недостатки Бесплатный Open Source Огромное количество успешных игр Нативный симулятор Огромное коммьюнити Отсутствие Android Objective C – не самый легкий язык для AS3-разработчика Продались Zynga
10. Часть 1. Выбираем Framework cocos2D –Для чего подходит? Идеально для инди-разработчиков Если не испытываете проблем с низкоуровневым Objective C Лучший выбор для iOS http://www.cocos2d-iphone.org/ Искать тут:
11. Часть 1. Выбираем Framework Ansca Corona Плюсы Недостатки Компиляция под Android LUA Ежедневные обновления Тех. поддержка и коммьюнити Невозможность подключать нативные плагины Компиляция на сервере Corona Не всегда адекватно работающий симулятор
12. Часть 1. Выбираем Framework А нужен ли Android? 400.000 активаций в день Нет проблем с попадением в Market (быстрый аппрув) Слабая конкуренция 4.5 млрд скачанных приложений Появились In-App Purchases
13. Часть 1. Выбираем Framework И побеждает…. http://www.anscamobile.com/corona/ Искать тут:
17. Часть 2. Экспорт ассетов Экспорт с помощью JavaScript Flash API Library MegaMonsters.fla Heroes.fla Islands.fla SuperDudeFolder JavaScript Flash API SeaTurtle MagicMushroom CrazyPirate SAVE
18. Часть 2. Экспорт ассетов Выдираем ассеты с помощью AIR-приложения location_1.swf META-Data Images
19. Часть 2. Экспорт ассетов Анимации в Sprite Sheets Sprite Sheet Выделение памяти в степенях 2 (600x600 такой же размер как 1024x1024) 1024x1024 – Макс. Размер (некоторые девайсы могут 2048x2048) Оптимизируем Sprite Sheet’ы Zwoptex’ом http://zwoptexapp.com/
20. Часть 2. Экспорт ассетов Экспорт переодеваемых персонажей Персонаж Части тела (PNG) Одежда и черты лица Origins (X,Y) Анимация Точки трансформации (X,Y) Motion Tweens Вычисляем абсолютные X,Y для каждой одетой части.
24. Часть3. Game Design Мини-игры Мини-игры для TouchScreen’ов Усложняется со временем (до 9 рун) Быстрое принятие решений Энергия в награду Точность важнее скорости Необходимо для прохождения игры Контуры усложняются с прогрессом игрока
25. Часть 3. Game Design Измененные Социальные Механики Карта Друзей Добавление по User Code’у Бонус за приглашение друзей через Facebook Friend Code выдается каждому игроку при регистрации. Если друг введет у себя твой код, вы оба получите СтарМани
27. Часть3. Game Design Упрощение игры Прохождение карт по очереди Инструменты даны сразу Одни и те же коллекции
28. Часть3. Game Design Волшебные Рубины Волшебные Рубины – основной способ улучшать характеристики своего персонажа Можно добыть только собирая коллекции полностью Не продаются за деньги
29. Часть 3. Game Design Экшен-Бар Побуждает игрока активно взаимодействовать с экраном девайса Уменьшает зависимость доходов от удачи Вызывает позитивные эмоции у игроков Дополнительный стимул тратить СтарМани на открытие препятствий
30. Часть 3. Game Design Gambling Вместо производства расходников, их можно теперь выиграть у Пьяного Торговца
34. Часть 3. Программирование Разное у Corona и Flash Нет фильтров и доступа к пикселям Не всегда удобная система координат Непривычная работа с растровыми объектами-изображениями Нет хорошей среды для программирования
35. Часть3. Программирование Реализация связи с Сервером Браузер Мобильный My iPhone Сохранить новые данные Сохранение ОК! Сокровища Профит Копать ТУТ My iPad Синхронизироваться Новые данные Не нужно постоянное соединение с Интернет
36. Часть3. Программирование Компиляция проекта на Corona Проблемы Симулятор != Девайс Билд происходит на удаленном сервере Иногда билды занимают до 10-15 минут Не всегда корректно работает с вложенными папками в проекте
37. Что мы сделали? Кросс-платформенное мобильное приложение Не требует постоянного соединения с Сетью Проделана огромная работа по оптимизации игры для TouchScreen
Наверное, стоит рассказать про библиотеку их стандартную, которую они кусками сделали по образу и подобия флешевых концепций.Про язык:В принципе в слайдах основное есть, язык реально на очень малом числе концепций строится.Общая идея языка такова. Основной тип – таблица. Есть ещё строки, числа и функции. Функции оперируют над всеми типами, в том числе над функциями. Соотстветсвенно, переменные все эти типы могут хранить. Единственный другой тип – userData, бинарные данные подгруженные из C++. В короне это только системные объекты короны.Таблицы индексируются по любому типу – как по числам (массивы), так и по строкам (ассоциативные строковые массивы), так и по таблицам и функциям (чуть более изощрённые семантические творения, ближе к ООП). В принципе, базовый язык на этом заканчивается – пиши себе функции подряд, определяй новые, храни всё в таблицах, всё работает, зарабатывай бабло.Осталось выучить API короны.Но на самом деле, в таблице всегда есть особый элемент – метатаблица. Она и позволяет реализовывать ООП, поскольку определяет свойства таблицы. Метатаблица отвечает за индексацию таблицы – если в неё кладёшь по первому индексу 1, функция индексации обычно при попытке считать первый индекс даст этот элемент, в первом индексе. А можно её поменять, чтоб она давала тот, который после запрашиваемого – второй в данном случае.Почти все навороты языка кроме базового синтаксиса, императивного программироавния (тупо последовательность команд) и функционального программирования (оперирование функциями как объектами) – связано с метатаблицами. Есть ещё рефлексивность кой какая. В короне по-моему только и можно что узнать динамический тип переменной. Сериализации/десериализации точно нет, я из-за этого немного JSON’овский парсер перелопачивал.Про ООП:(может быть тебе даже не стоит полностью в это въезжать, эт я для общего представления...)На самом деле, наследование и инкапсуляция (правильное название «видимости») очень условно только есть. Инкапсуляция на уровне методов и переменных объектов её нет, а на уровне методов и переменных модуля они есть, как бы странно это ни звучало %). Наследование очень точно управляемо... То, что обычно в одну строчку делается, надо расписать довольно подробно – вся эта индексирующая ебола виртуальных методов. Но в каком-то смысле это удобнее и даёт больше контроля, но еболы побольше и понимать приходится больше.Основная суть реализации ООП в том, что кроме того, что можно просить числа, строки и таблицы у таблицы по строке – можно просить функции. При чём не просто функцию, а принимающую на вход таблицу, кроме остальных параметров. А эта таблица – объект класса, и в нём по строкам (названиям) индексируются переменные и функции класса. Поэтому нет честной инкапсуляции, в частности, потому что все методы таблицы индексируются по строкам (но по-хитрому я её реализую для классов, через инкапсуляцию по модулям – но всё равно не для объектов). Если помнишь, с того, что все нестатические методы принимают на вход ссылку на сам объект – this/self – в принципе ООП и начинается, именно за счёт этого у всех методов класса есть доступ к переменным и другим методам, это клей объектов.Надо в классе создавать метод-генератор, который будет генерировать объекты – хуячить в них все функции и переменные. А метатаблица позволяет функции хранить один раз, в одной таблице, и всегда вызывать их оттуда, передавая текущую таблицу-объект одним из аргументов. Просто надо ещё при создании всем объектам ровно эту метатаблицу, индексирующую функции класса, устанавливать.Вот отсюда ООП. Как видишь, оно не совсем настоящее, но в синтаксисе языке реализуется очень естественно, вплоть до того что синтаксис ООП-стиля становится похожим на С++ный (от которого пошёл флешевый), поэтому это очень рапостранено в Lua. Для небольших программ (месяц разработки кодовой части) скорее подходит более процедурный и функциональный стиль.Когда я говорю «есть ООП» я наверное немного берегу психику окружающих от реальности :-D. Но в коде эти концепции все отражаются довольно просто.