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

Регистрация: Mar 2009
Сообщений: 4,219
Записей в блоге: 14
alexandrratush, вот готовый движок именно барабана. Половина тебе тут не надо, лень просто отчищать, но суть поймешь, я делаю через интер фрейм, а остановку через макс.

Код AS3:
package pro.clonez.slots.views.drums 
{
	import com.greensock.easing.Back;
	import com.greensock.TweenMax;
	import com.in4core.utils.FastSoundManager;
	import flash.display.MovieClip;
	import flash.display.Sprite;
	import flash.events.Event;
	import flash.filters.BlurFilter;
	import pro.clonez.slots.interfaces.IReel;
	import pro.clonez.slots.models.ReelsModel;
 
	/**
	 * ...
	 * @author in4core progression lab
	 */
 
	public final class SimpleReel extends Sprite implements IReel
	{
		private var _symbolClass:Class;
 
		private var _mini1:Sprite = new Sprite();
		private var _mini2:Sprite = new Sprite();
		private var _answer:Sprite = new Sprite();
 
		private var _isRunning:Boolean = false;
		private var _reelsModel:ReelsModel;
		private var _reelNum:int = -1;
 
		public static var bonusAccepted:Boolean = false;
 
		public function SimpleReel() 
		{
			super();
		}
 
		public function set reelNum(n:int):void
		{
			this._reelNum = n;
		}
 
		public function initialize(symbolClass:Class , model:ReelsModel):void 
		{
			this._reelsModel = model;
			this._symbolClass = symbolClass;
 
			for (var i:int = 0; i < this._reelsModel.maxSymbolsOnDrum; i++)
			{
				var sy1:MovieClip = new this._symbolClass() as MovieClip;
				var sy2:MovieClip = new this._symbolClass() as MovieClip;
				var sy3:MovieClip = new this._symbolClass() as MovieClip;
 
				sy1.gotoAndStop( random );
				sy2.gotoAndStop( random );
				sy3.gotoAndStop( random );
 
				sy1.y = sy2.y = sy3.y = i * sy1.height;
 
				this._mini1.addChild(sy1);
				this._mini2.addChild(sy2);
				this._answer.addChild(sy3);
			}
 
			this.addChild(this._mini1);
			this.addChild(this._mini2);
			this.addChild(this._answer);
 
			initFirst();
		}
 
		private function initFirst():void
		{
			revertSymbols();
 
			this._mini1.y = 0;
			this._mini2.y = -this._mini2.height;
			this._answer.y = this._mini2.y;
			randomizeSymbols(this._mini2);
		}
 
		public function startSpin():void 
		{
			initFirst();
 
			this._isRunning = true;
			this.addEventListener(Event.ENTER_FRAME , rollIt);
		}
 
		private function rollIt(e:Event):void 
		{
			if (this._mini1.y >= this._mini1.height) 
			{
				this._mini1.y = this._mini2.y - this._mini1.height;
			}
			else if (this._mini2.y >= this._mini2.height) 
			{
				this._mini2.y = this._mini1.y - this._mini2.height;
			}
 
			this._mini1.y += this._reelsModel.drumSpeed;
			this._mini2.y += this._reelsModel.drumSpeed;
 
		}
 
		public function stopSpin(resultData:Array):void 
		{
			if (!bonusAccepted)
			{
				if (resultData.indexOf("12") != -1 || resultData.indexOf(13) != -1 ) 
				{
					FastSoundManager.playSound("book" , false , 0.5 , 100);
				}
				else FastSoundManager.playSound("stopReel" , false , 0.5 , 100);
			}
 
			this._isRunning = false;
			this.removeEventListener(Event.ENTER_FRAME , rollIt);
 
			var count:int = this._reelsModel.maxSymbolsOnReel;
			var firstClip:Sprite;
			var secondClip:Sprite;
			var symbol:MovieClip;
 
			if (this._mini1.y > 0) 
			{ 
				firstClip = this._mini2; 
				secondClip = this._mini1;
			}
			else
			{ 
				firstClip = this._mini1; 
				secondClip = this._mini2;
			}
 
			for (var i:int = 0; i < count; i++)
			{
				symbol = this._answer.getChildAt(i) as MovieClip;
				symbol.gotoAndStop( resultData[i] );
				toFSSymbols(symbol);
			}
 
			this._answer.y = secondClip.y - secondClip.height;
			firstClip.y = this._answer.y - this._answer.height;
 
			TweenMax.to(this._answer , this._reelsModel.tweenMaxStopTimeJump , 
			{ y:0 , ease:Back.easeOut  } );
			TweenMax.to(firstClip, this._reelsModel.tweenMaxStopTimeJump , 
			{ y:-firstClip.height , ease:Back.easeOut  } );
			TweenMax.to(secondClip , this._reelsModel.tweenMaxStopTimeJump , 
			{ y:secondClip.height, ease:Back.easeOut  } );
		}
 
		public function switchState(state:String):void 
		{
			if (state == "blur")
			{
				this._mini1.filters = this._mini2.filters = [new BlurFilter (0, this._reelsModel.maxBlur, 1)];
			}
			else if (state == "unblur")
			{
				this._mini1.filters = this._mini2.filters = [];
				this._answer.filters = [new BlurFilter (0, this._reelsModel.maxBlur, 1)];
				TweenMax.to(this._answer , this._reelsModel.tweenMaxStopTimeJump , { blurFilter: { blurY:0 } , ease:Back.easeOut }  );
			}
		}
 
		public function changeF():void 
		{
			var count:int = this._reelsModel.maxSymbolsOnReel;
			var symbol1:MovieClip;
			var symbol2:MovieClip;
			var symbol3:MovieClip;
 
			for (var i:int = 0; i < count; i++)
			{
				symbol1 = this._answer.getChildAt(i) as MovieClip;
				symbol2 = this._mini1.getChildAt(i) as MovieClip;
				symbol3 = this._mini2.getChildAt(i) as MovieClip;
 
				toFSSymbols(symbol1);
				toFSSymbols(symbol2);
				toFSSymbols(symbol3);
			}
		}
 
		public function rechangeF():void 
		{
			var count:int = this._reelsModel.maxSymbolsOnReel;
			var symbol1:MovieClip;
			var symbol2:MovieClip;
			var symbol3:MovieClip;
 
			for (var i:int = 0; i < count; i++)
			{
				symbol1 = this._answer.getChildAt(i) as MovieClip;
				symbol2 = this._mini1.getChildAt(i) as MovieClip;
				symbol3 = this._mini2.getChildAt(i) as MovieClip;
 
				toNormalSymbols(symbol1);
				toNormalSymbols(symbol2);
				toNormalSymbols(symbol3);
			}
		}
 
 
		private function randomizeSymbols(o:Sprite):void
		{
			var symbol:MovieClip;
 
			for (var i:int = 0; i < o.numChildren; i++)
			{
				symbol = o.getChildAt(i) as MovieClip;
				symbol.gotoAndStop(random);
				toFSSymbols(symbol);
			}
		}
 
		private function revertSymbols():void
		{
			var count:int = this._reelsModel.maxSymbolsOnReel;
			var symbol1:MovieClip; 
			var symbol2:MovieClip;
			var symbol3:MovieClip;
			var n:int = 0;
 
			for (var i:int = 0; i < count; i++)
			{
				symbol1 = this._answer.getChildAt(i) as MovieClip;
				symbol2 = this._mini1.getChildAt(i) as MovieClip;
				symbol3 = this._mini2.getChildAt(i) as MovieClip;
				n = symbol1.currentFrame;
				symbol2.gotoAndStop (n);
 
				toFSSymbols(symbol1);
				toFSSymbols(symbol2);
				toFSSymbols(symbol3);
			}
		}
 
		public function get isRunning():Boolean
		{
			return this._isRunning;
		}
 
		private function get random():int
		{
			return Math.floor(Math.random() * (this._reelsModel.symbolsCount - 1) + 1);
		}
 
		private function toFSSymbols(o:MovieClip):void
		{
			if (!bonusAccepted) return;
 
			var d:MovieClip = o.getChildAt(0) as MovieClip;
			d.gotoAndStop("f");
		}
 
		private function toNormalSymbols(o:MovieClip):void
		{
			var d:MovieClip = o.getChildAt(0) as MovieClip;
			d.gotoAndStop("simple");
		}
 
	}
 
}
__________________
Марк Tween