Урок: создание Простого Платформера на AS3

Привет ребят! В ответ на вопросы на форуме, я вспомнил с чего сам все начинал, пришел в благодатное расположение духа и решил вот собрать небольшой видео урок для новичков, по созданию платформера. Использовал подход описанный еще у xitri, собсвенно код в кадрах, hitTestObject и все такое… ничего необычного, но думаю новичкам — самое то. Когда сам только начинал очень хотелось такого вот урока))) Если будет 3 часть, то покажу как сделать наклонные платформы, делается легко, а выглядит круто:D

Часть 1: www.youtube.com/watch?v=Epe_zLYPk8E
Часть 2: www.youtube.com/watch?v=Ai1573hJ0U4

P.S. Снимал без какой-либо особой подготовки, так что за всякие «ааа», «эээ», запинки и затырки заранее извиняюсь!

Рефакторинг и оптимизация растрового рендера

Рефакторинг – это улучшение читаемости кода без изменения его функционала.
Оптимизация – увеличение эффективности работы программы.

В этой публикации я хочу на небольшом примере показать, как происходит рефакторинг и оптимизация. Никакой теории не будет, так как она уже давно описана в большом количестве книг. Перейдем сразу к практике. Для примера возьмём симпатичную флешку из публикации Растровый рендер в as3. Двигаем тысячи картинок с разрешения Platon. Если посмотреть на код, то можно увидеть, что внутри не всё так симпатично. Это нам и нужно. Предлагаю не закрывать статью по ссылке выше, чтобы исходный код был у вас перед глазами. Будем улучшать.
Читать дальше →

Растровый рендер в as3. Двигаем тысячи картинок

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

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

Обещанный мой SoundManager

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

Цитата:
… А основные сложности и возня у разработчика возникают тогда, когда надо организовать честную паузу, следить за количеством каналов и менеджить их по приоритетам (а не просто глушить несчастливый канал, например у меня одновременно идет перестрелка, взрывчики и один ярко выделяющийся на фоне старт баллистической ракеты — если число каналов переполнилось, то убрав один из выстрелов я мало что потеряю, а вот если заглохнет резко один выделяющийся старт ракеты, то это fail).

Потом, а что делать с зацикленными спецэффектами? Например едет танчик, пока он жив — крутится по циклу жужжание мотора и гусениц. Надо запоминать того кто вызвал спецэффект и уметь принудительно его останавливать.

Кроме того, тюнить громкость и стереобазу каждого эффекта в аудиоредакторе это неверно (да и долго), поэтому каждый саунд должен импортироваться нормализованным и в коде в библиотеке должен иметь связанный с ним саундтрансформ.

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

Плюс еще всегда хорошо для однотипных часто повторяющихся звуков (выстрелов, попаданий итп) — иметь некоторый набор звуков. Иначе в ухо начинает резать. Соответственно, в коде запуск такого звука — это вызов метода с передачей типа «попадание_в_плоть». А уже менеджер рандомно пустит что-то из набора.

Несколько камрадов высказали желание глянуть на мою реализацию. Я минимально прокомментировал код и выкладываю.
Читать дальше →

Глобальная система звуков. Создание собственного класса управления звуками с помощью паттерна Singleton

Эта публикация является переводом моей статьи о создании собственного Sound Manager-а (на украинском).

SoundЗанимаясь разработкой игры "Turtle Dreams to Fly" (сейчас доступна на FGL), я столкнулся с необходимостью управления звуками. Требовался обычный функционал: кнопки включить/выключить все звуки и музыку в игровом интерфейсе. Сложность ситуации заключалась в том, что разные звуки были привязаны к разным игровым объектам, и управлять ими с помощью единого интерфейса (кнопок mute music и mute soundeffects) представлялось невозможным.

Конечно, сегодня существует множество готовых решений (например, класс SoundManager), но их использование показалось мне не слишком удобным в первую очередь из-за неполного понимания чужого кода и нежелания «связываться» с его оптимизацией/отлавливанием багов и т. д… Поэтому было решено создавать свой собственный класс управления звуками, в котором будет только нужный функционал и который будет идеально вписываться в структуру игры.
Читать дальше →

StatisticFrame [monitoring fps & memory]


Для учета и контроля fps и используемой приложением памяти, был написан набор классов StatisticFrame. С его помощью можно наблюдать изменения параметров при различных ситуациях и нагрузках.
Читать дальше →
  • +9

Обновление Cirrus (ранее Stratus)

Первое нововведение — это передача ключа разработчика в качестве второго параметра, а не через URI, что делает ключ более защищенным.

Пример:

var nc:NetConnection = new NetConnection();
nc.connect("rtmfp://p2p.rtmfp.net", "000000000000000000000000-000000000000");

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

Пример:

// on sender peerID 9876 sending to peerID 1234
nc.call("relay", null, "1234", "INVITE");

// on receiver peerID 1234, this callback happens
nc.client.onRelay("9876", "INVITE");


Оригиналhttp://blog.z-13.ru/2011/01/update-cirrus/
Более подробноhttp://forums.adobe.com/thread/780788?tstart=0
  • +2

Как делалась первая игра. Советы начинающим

Всем Привет. Меня зовут Андрей, и я с детства увлекался видеоиграми. Идея делать флеш игры засела мне в голову пару лет назад, но всё как-то не было времени. Я читал форумы и блоги разработчиков, играл в игры, завёл тетрадку куда записывал свои идеи, но руки как-то не доходили. Оказалось, самое трудное это начать.

Я очень рад, что моя половина разделила моё увлечение и всячески помогала мне в этом, не только советами но и делом.

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

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

Видеоподкасты по паттернам проектирования

Для всех любителей паттернов проектирования — видеоподкасты на английском языке (AS3).
Уже рассказывалось о посетителе, команде, хранителе и стратегии.

Можем заодно обсудить кто как использует паттерны в разработке игр. Я, например, одно время злоупотреблял синглтонами, сейчас вроде отошел. Вот такие простыни в коде встречались:
LevelTimer.instance.update();
MovementManager.instance.update();
Camera.instance.update();
HeroManager.instance.update();
PeopleManager.instance.update();
EnemiesManager.instance.update();
OrbsManager.instance.update();
CastleManager.instance.update();
PrisonsManager.instance.update();
BonusesManager.instance.update();
BombsManager.instance.update();
ShipsManager.instance.update();

Ну и state machine, куда-же без нее.
  • +4