Показать сообщение отдельно
Старый 28.10.2011, 14:15
Astraport вне форума Посмотреть профиль Отправить личное сообщение для Astraport Найти все сообщения от Astraport
  № 15  
Ответить с цитированием
Astraport
 
Аватар для Astraport

блогер
Регистрация: Sep 2009
Сообщений: 2,463
Записей в блоге: 2
Это главный класс, есть ещё Card, но он не важен.
Код AS3:
package
{
	import com.greensock.TweenLite;
 
	import flash.display.Bitmap;
	import flash.display.BitmapData;
	import flash.display.Graphics;
	import flash.display.Loader;
	import flash.display.LoaderInfo;
	import flash.display.Sprite;
	import flash.display.StageAlign;
	import flash.display.StageScaleMode;
	import flash.events.Event;
	import flash.events.HTTPStatusEvent;
	import flash.events.MouseEvent;
	import flash.filters.DropShadowFilter;
	import flash.filters.GlowFilter;
	import flash.net.URLRequest;
	import flash.system.Security;
	import flash.text.TextField;
	import flash.text.TextFormat;
	import flash.text.TextFormatAlign;
 
	[SWF(width='200', height='310', backgroundColor='#E4CFA8', frameRate='30')]
	public class Shuffle extends Sprite
	{
 
		private var card:Card;
		private var bitmapData:BitmapData;
		protected var deckX:Number = 104;
		protected var deckY:Number = 400;
		private var loader:Loader = new Loader();
		[Embed(source = 'images/btn.png')]
		private static const Btn:Class;
		private var btn:Bitmap;
		private var currentPic:int = 0;
		private var currentPic2:int = 0;
		public function Shuffle()
		{
			if (stage) init();
			else this.addEventListener(Event.ADDED_TO_STAGE, init);
		}
 
		public function init(e:Event = null):void {
			Security.allowDomain("*");
			this.removeEventListener(Event.ADDED_TO_STAGE, init); 
			stage.align = StageAlign.TOP_LEFT;
			stage.scaleMode = StageScaleMode.NO_SCALE;
			var g:Graphics = this.graphics;
			g.beginFill(0xE4CFA8);
			g.drawRect(0, 0, 200, 310);
			g.endFill(); 			
			loadDeck();
		}
 
		protected function loadDeck():void
		{
			var n:int = this.numChildren;
			for (var i:int = 0; i < n; i++){
				this.removeChild(this.getChildAt(0));
			}
			currentPic = 0;
			currentPic2 = 0;
 
			loader = new Loader();
			var rnd:Number = randomNumber();
			var request:URLRequest = new URLRequest("images/cards/" + rnd + ".jpg");
			loader.contentLoaderInfo.addEventListener(Event.COMPLETE, onComplete);
			loader.addEventListener(HTTPStatusEvent.HTTP_STATUS,onError);
			loader.load(request);
		}
 
		protected function randomNumber(low:Number=0, high:Number=14):Number
		{
			return Math.floor(Math.random() * (1+high-low)) + low;
		}
 
		protected function onError(event:Event):void
		{
		}
 
		protected function onComplete(event:Event):void
		{
			bitmapData = Bitmap(LoaderInfo(event.target).content).bitmapData;
			showDeck();
		}
 
		private function showDeck():void
		{
			if (currentPic==5){
				var myFormat:TextFormat = new TextFormat();
				myFormat.size = 18;
				myFormat.align = TextFormatAlign.CENTER;
				var txt:TextField = new TextField;
				txt.x = 5;
				txt.y = 10;
				txt.width = stage.width - 10;
				txt.height = 48;
				txt.multiline = true;
				txt.wordWrap = true;
				txt.setTextFormat(myFormat);
				txt.defaultTextFormat = myFormat;
				txt.selectable = false;
				txt.text = 'Бла-бла';
				addChild(txt);
				animations2();
				return;
			}
			card = new Card(currentPic, bitmapData);
			card.x = deckX - card.width/2 - currentPic*5;
			card.y = deckY - card.height/2 - currentPic*5;
			card.addEventListener(MouseEvent.CLICK, onClick);
			card.rotationX = 180;
			card.filters = [new DropShadowFilter(1, 45, 0x000000, 0.8, 8, 8, 1)];
			card.name = "card" + String (currentPic);
			addChild(card);
			deckAnimation(card);
			currentPic++;
		}
 
		private function animations2():void
		{
			if(currentPic2==5){
				return;
			}
			var cardA:Card = this.getChildByName("card" + String (currentPic2)) as Card;
			if (currentPic2%2 == 0){
				var xPos:Number = - 150;
			} else {
				xPos = 150;
			}
			TweenLite.to(cardA, 0.8, {x:cardA.x + xPos, onComplete:placeOnTop, onCompleteParams:[cardA, cardA.x]});
			currentPic2++;
		}		
 
		private function placeOnTop(mc:Card, xpos:int):void{
			addChild(mc)
			TweenLite.to(mc, 0.8, {x:xpos, onComplete:animations2});
		}
 
 
		private function deckAnimation(cardA:Card):void
		{
			TweenLite.to(cardA, 0.5, { x: cardA.x + 10, y: cardA.y + 10, onComplete: showDeck} );
		}
 
		protected function onClick(event:MouseEvent):void
		{
			var n:int = this.numChildren;
			for (var i:int = 0; i < n; i++){
				TweenLite.killTweensOf(this.getChildAt(i));
			}
			clearTable();
			var card:Card = event.currentTarget as Card;
			addChild(card);
			TweenLite.to( card, 1, { x: 25, y: 90, rotationX: 0, onUpdate: card.reverse } );
		}
 
		protected function clearTable():void
		{
			var n:int = this.numChildren;
			for (var i:int = 0; i < n; i++){
				this.removeChild(this.getChildAt(0));
			}
			btn = new Btn() as Bitmap;
			btn.x = 50;
			btn.y = 40;
			btn.smoothing = true
			btn.addEventListener(MouseEvent.CLICK, onClickBtn);
			var btnContainer:Sprite = new Sprite();
			btnContainer.addEventListener(MouseEvent.CLICK, onClickBtn);
			btnContainer.buttonMode = true;
			btnContainer.addChild(btn);
			addChild(btnContainer);
		}
 
		protected function onClickBtn(event:Event):void
		{
			loadDeck();
		}
	}
}