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");
}
}
}