Показать сообщение отдельно
Старый 24.03.2012, 23:58
mihael_p вне форума Посмотреть профиль Отправить личное сообщение для mihael_p Посетить домашнюю страницу mihael_p Найти все сообщения от mihael_p
  № 1  
Ответить с цитированием
mihael_p

Регистрация: Jul 2011
Сообщений: 249
Отправить сообщение для mihael_p с помощью Skype™
По умолчанию Информационные иконки бонусов с таймером

Допустим: есть герой, есть бонусы с ограниченным по времени действием, когда герой "берет" такой бонус - начинается действие связанное с этим бонусом и запускается таймер по истечению которого нужный бонус отключается.Хочу информировать игрока о том, что он подобрал такой то бонус и он закончится через столько то секунд, примерно это будет выглядеть так:

В следующий момент, игрок увидит, что иконка бонуса "1" - удалится, а иконки "2" и "3" поднимутся, то есть "2" займет место "1" а "3" поднимется на место "2".
Пожалуйста, подскажите как реализовать?

Когда думал сам - сделал такой класс под это дело, но ничего толком не работает:

Код AS3:
package 
{
	import flash.display.MovieClip;
	import flash.events.Event;
	import flash.events.TimerEvent;
	import flash.utils.Timer;
 
	public class BonusInspector extends MovieClip 
	{
		public var mc:MovieClip = new Bonus_Inspector();//Место под  иконки бонусов
		public var iconMC:MovieClip;
		private var iconsArray:Array = [];
		private var countTime:Timer = new Timer(1000,0);
		private var sec:int = 5;
 
		public function BonusInspector():void
		{
			if (stage) init();
			else addEventListener(Event.ADDED_TO_STAGE, init);
		}
 
 
		private function init(e:Event = null):void 
		{
			removeEventListener(Event.ADDED_TO_STAGE, init);
			mc.x = 50;
			mc.y = 350;
			addChild(mc);
		}
		public function setBonusMc(mcNum:int):void // Сюда приходит номер бонуса, выбирается 
		{						// иконка бонуса исходя из того, что пришло
			sec = 5;
			switch(mcNum)
			{
				case 1:
					iconMC = new Freeze();
					break;
				case 2:
					iconMC = new BulletMaxDist();
					break;
				case 3:
					iconMC = new Speed();
					break;
				case 4:
					iconMC = new BulletMaxPower();
					break;
 
			}
			iconMC.id = mcNum;
			mc.addChild(iconMC);
			countTime.addEventListener(TimerEvent.TIMER, onTime);
			countTime.start();
			iconsArray.push(iconMC);
			for (var i:int=0; i < iconsArray.length; i++)
			{
				if (i == 0)
				{
					iconsArray[i].x = 30; 
					iconsArray[i].y = 30; 
				}
				else {
					iconsArray[i].x = iconsArray[i-1].x; 
					iconsArray[i].y=(iconsArray[i-1]).y + 30; 
				}
 
			}
		}
		private function onTime(e:TimerEvent):void
		{
			if (sec == 0)
			{
				iconMC.time.text = '';
				countTime.stop();
				for (var i:int=0; i < iconsArray.length; i++)
				{
					if (iconsArray[i].id == iconMC.id)
					{
						iconsArray.slice(i, 1);
					}
				}
				mc.removeChild(iconMC);
			}
 
			else{
				sec -= 1;
				iconMC.time.text = sec;
			}
		}
	}
 
}
__________________
Не стыдно спросить, стыдно не знать !