Авг
14

Запускаем Flash на Android. Часть 2

Продолжаем разговор. Пишем код.

Чтобы задать размеры приложения (флэшки) в файле Main.as напишем:

[SWF(width = "480", height = "800", backgroundColor = "#ffffff")]

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

package
{
	import caurina.transitions.Tweener;
	import flash.desktop.NativeApplication;
	import flash.display.NativeMenu;
	import flash.display.NativeMenuItem;
	import flash.events.Event;
	import flash.display.Sprite;
	import flash.display.StageAlign;
	import flash.display.StageScaleMode;
	import flash.events.KeyboardEvent;
	import flash.ui.Keyboard;
	import flash.ui.Multitouch;
	import flash.ui.MultitouchInputMode;
	import main.Stats;

	[SWF(width = "480", height = "800", backgroundColor = "#ffffff")]

	/**
	 * ...
	 * @author DrDerico
	 */
	public class Main extends Sprite
	{
		private var _sprite:Sprite = new Sprite();

		public function Main():void
		{
			stage.scaleMode = StageScaleMode.NO_SCALE;
			stage.align = StageAlign.TOP_LEFT;
			stage.addEventListener(Event.DEACTIVATE, deactivate);

			// touch or gesture?
			Multitouch.inputMode = MultitouchInputMode.TOUCH_POINT;

			// entry point
			_sprite.graphics.beginFill(0x000000);
			_sprite.graphics.drawRect(0, 0, 50, 50);
			_sprite.graphics.endFill();
			_sprite.x = 50;
			_sprite.y = 50;
			addChild(_sprite);

			Tuda();

			addChild(new Stats());

		}

		private function Tuda():void
		{
			Tweener.addTween(_sprite,
			{
				time:2,
				y:600,
				x:400,
				onComplete:Suda
			});
		}

		private function Suda():void
		{
			Tweener.addTween(_sprite,
			{
				time:2,
				y:50,
				x:50,
				transition:"linear",
				onComplete:Tuda
			});
		}

		private function deactivate(e:Event):void
		{
			// auto-close
			NativeApplication.nativeApplication.exit();
		}

	}
}

Квадратик с успехом двигается туда-сюда.

В принципе, можно запустить любую флешку на Android, даже если у вас нет исходного кода. Просто копируем нужную флешку в папку bin и переименовываем её. Потом запускаем Run.bat или PackageInstallApp.bat.

А теперь несколько подсказок.

1. Как отловить нажатие кнопки Back, Menu или Search?

Добавляем листенер на нажатие клавиш, но при этом, если не хотим, чтобы приложение закрывалось по кнопке Back, убираем строчку NativeApplication.nativeApplication.exit ();
А чтобы приложение вообще не «сворачивалось», то нужно останавливать распространение события нажатия на кнопку. Вот пример кода:

...

stage.addEventListener(KeyboardEvent.KEY_DOWN, onKeyPress);  //отлавливаем именно KEY_DOWN

...
private function onKeyPress(ev:KeyboardEvent):void
{
switch(ev.keyCode)
{
case Keyboard.BACK:
{
ev.preventDefault();
ev.stopImmediatePropagation();
//тут ваша реакция на кнопку. Можно показать запрос на выход. Или сделать паузу в игре
break;
}
}
}

2. Активация и деактивация приложения

Если всё делать по уму, то приложение должно отлавливать два события — Event.ACTIVATE и Event.DEACTIVATE. Допустим, приложение запущено, играет музыка, идёт игровой процесс. И тут бац — звонок на телефон. Запускается событие Event.DEACTIVATE, и ваше приложение должно:

  • выключить музыку;
  • поставить паузу в игре;

Звонок закончился и приложение вновь активируется. Нужно отреагировать и выйти из паузы и включить музыку (или ничего не делать и дать юзеру возможность нажать кнопку типа CONTINUE и продолжить игру).




9 комментариев к записи “Запускаем Flash на Android. Часть 2”

  • а с производительностью как?

    • не поверишь! Стабильные 30 фпс на моём Galaxy S :)

      • чет не верится... на айфоне у меня было 4-5 фпс... надо проверить

  • попробовал... собрал... запускаю на телефоне — просит установить adobe air ^(

    • 30 ФПС — это я про этот пример с квадратиком. На реальных играх ФПС не замерял. Но на глаз ясно, что меньше 30.

      Я думал это очевидно, что нужен air на телефоне :) Установил? Заработало?

      • выкидывает в маркет и пишет что нет такого приложения...

        у меня андроид с вырезанным флешем... видно не в натив конвертит ^(

  • Запускал на телефоне простенькие примеры с Box2d — тормозов никаких.

    На Маркете нашёл приложение — SmartFlash — проигрывает обычные swf на телефоне. Странно, но флэшки, написанные для настольных компов, работают через SmartFlash быстрее, чем если бы я их запускал через Adobe AIR.

    Например, игра Little Wheel вообще не тормозит на телефоне.

  • Спасибо за урок... только у меня выдает ошибку на 15 и 46 строках где встречается Stats? Что это может быть и для чего нужен Stats?

Прокомментировать