Main.as:

Код AS3:
package
{
import flash.display.Sprite;
import flash.events.Event;
import flash.text.*;
/**
* ...
* @author
*/
public class Main extends Sprite
{
public function Main()
{
if (stage) init();
else addEventListener(Event.ADDED_TO_STAGE, init);
}
private var reels:Array;
private var tf:TextField;
private function init(e:Event = null):void
{
removeEventListener(Event.ADDED_TO_STAGE, init);
tf = new TextField();
tf.type = "input";
tf.width = 50;
tf.height = 30;
tf.background = true;
tf.border = true;
//tf.backgroundColor = 0xFF0000;
tf.x = tf.y = 20;
tf.text = "0.1";
var format:TextFormat = new TextFormat();
format.size = 25;
tf.setTextFormat(format);
addChild(tf);
tf.addEventListener(Event.CHANGE, function (e:Event):void{
var duration:Number = Number(tf.text);
if(!isNaN(duration)) {
for (var i:uint = 0; i < reels.length; i++) {
reels[i].animDuration = duration;
}
}
});
reels = [];
for (var i:uint = 0; i < 5;i++) {
var reel:Reel = new Reel(150,150);
addChild(reel);
reels.push(reel);
reel.x = i * 155;
reel.y =-150;
reel.addItem(0, 0xFF0000);
reel.addItem(1, 0x00FF00);
reel.addItem(2, 0x000FF);
reel.addItem(3, 0xFF00FF);
reel.addItem(4, 0x00FFFF);
reel.spin();
}
}
}
}
Reel.as:

Код AS3:
package
{
import aze.motion.easing.Linear;
import flash.display.Sprite;
import flash.geom.Point;
import flash.text.TextField;
import flash.text.TextFormat;
import aze.motion.eaze;
/**
* ...
* @author
*/
public class Reel extends Sprite
{
private var items:Array = [];
private var cont:Sprite;
private var curItem:int = 0;
private var itemWidth:Number;
private var itemHeight:Number;
private var _animDuration:Number = 0.1;
public function Reel(itemWidth:Number, itemHeight:Number)
{
super();
this.itemWidth = itemWidth;
this.itemHeight = itemHeight;
}
public function addItem(n:uint, color:uint):void {
var item:Sprite = new Sprite();
item.graphics.beginFill(color, 1);
item.graphics.lineStyle(1, 0, 1);
item.graphics.drawRect(0, 0, itemWidth, itemHeight);
var tf:TextField = new TextField();
tf.text = String(n);
tf.textColor = 0;
tf.autoSize = "left";
var format:TextFormat = new TextFormat();
format.size = 80;
tf.setTextFormat(format);
tf.x = item.width * 0.5 - tf.width * 0.5;
tf.y = item.height * 0.5 - tf.height * 0.5;
item.addChild(tf);
items.push(item);
}
public function spin():void {
doSpinAnim();
}
private function doSpinAnim():void
{
if (cont)
removeChild(cont);
cont = new Sprite();
var _y:Number = 0;
for (var i:int = -2; i <= 1; i++) {
var n:int = curItem + i;
if (n < 0) n+=items.length;
if (n > items.length - 1) n = 0;
//trace(n);
items[n].y = _y;
_y += items[n].height;
cont.addChild(items[n]);
}
addChild(cont);
var _mask:Sprite = new Sprite();
_mask.graphics.beginFill(0, 0.5);
_mask.graphics.drawRect(0, 0, itemWidth, itemHeight*2);
var p:Point = new Point();
p = items[curItem].localToGlobal(p);
_mask.x = p.x;
_mask.y =p.y-itemHeight/2;
//stage.addChild(_mask);
cont.mask = _mask;
eaze(cont).easing(Linear.easeNone).apply({y:0}).to(_animDuration, {y:itemHeight}).onComplete(function():void {
curItem--;
if (curItem < 0) curItem = items.length - 1;
doSpinAnim();
});
}
public function set animDuration(value:Number):void
{
_animDuration = value;
}
}
}
В инпутфилде скорость анимации.
Красиво сам сделаешь