Код AS3:
package com.zackmercury.examples
{
import flash.display.Bitmap;
import flash.display.BitmapData;
import flash.display.Shape;
import flash.display.Sprite;
import flash.events.Event;
import flash.utils.getTimer;
/**
* ...
* @author ZackMercury
*/
public class Main extends Sprite
{
private var items:Array = [new Bitmap(R.i.getImage(R.ITEM_1).bitmapData, "auto", true), new Bitmap(R.i.getImage(R.ITEM_2).bitmapData, "auto", true), new Bitmap(R.i.getImage(R.ITEM_3).bitmapData, "auto", true), new Bitmap(R.i.getImage(R.ITEM_1).bitmapData, "auto", true), new Bitmap(R.i.getImage(R.ITEM_2).bitmapData, "auto", true), new Bitmap(R.i.getImage(R.ITEM_3).bitmapData, "auto", true)];
private var movement:Number = 0;
private var speed:Number = 100;
private var lastTick:int = 0;
private var mine:Array = [];
private var mineLine:int = 4;
private var pointer:Shape;
public function Main():void
{
if (stage) init();
else addEventListener(Event.ADDED_TO_STAGE, init);
}
private function init(e:Event = null):void
{
removeEventListener(Event.ADDED_TO_STAGE, init);
// entry point
addEventListener(Event.ENTER_FRAME, update);
for (var i:int = 0 ; i < items.length; i++)
{
addChild(items[i]);
items[i].y = items[i].height * i;
}
pointer = new Shape();
pointer.graphics.lineStyle(2, 0x770000);
pointer.graphics.beginFill(0xFF9999);
pointer.graphics.moveTo(50, 0);
pointer.graphics.lineTo(50, 50);
pointer.graphics.lineTo(0, 25);
pointer.graphics.lineTo(50, 0);
addChild(pointer);
pointer.x = items[0].width;
pointer.y = items[0].height * items.length/2 - pointer.height / 2;
}
private function update(e:Event = null):void
{
var currTick:int = getTimer();
var delta:int = currTick - lastTick;
for (var i:int = 0; i < items.length; i ++)
{
items[i].y = int(movement + items[i].height * i)%(items[i].height*items.length);
}
movement += speed * delta/1000;
if (speed > 0)
speed --;
else
{
drawMine(getItemAt(pointer.y + pointer.height / 2).bitmapData);
speed = Math.random() * 700;
}
lastTick = currTick;
}
private function getItemAt(y:int):Bitmap
{
for (var i:int = 0 ; i < items.length; i ++)
{
if (y >= items[i].y && y <= items[i].y + items[i].height)
return items[i];
}
return null;
}
private function drawMine(bmd:BitmapData):void
{
var bitmap:Bitmap = new Bitmap(bmd, "auto", true);
addChild(bitmap);
mine.push(bitmap);
for (var i:int = 0; i < mine.length; i ++)
{
mine[i].x = 100 + i % mineLine * mine[i].width;
mine[i].y = int(i/mineLine)*mine[i].height;
}
}
}
}
Код AS3:
package com.zackmercury.examples
{
import flash.display.Bitmap;
import flash.display.CapsStyle;
/**
* ...
* @author ZackMercury
*/
public class R extends Object //R - Resourse Factory Class
{
private static var ins:R;
public static const ITEM_1:String = "Item1Bitmap";
public static const ITEM_2:String = "Item2Bitmap";
public static const ITEM_3:String = "Item3Bitmap";
[Embed(source="images/item1.png")]
private var Item1EmbedClass:Class;
private var Item1Bitmap:Bitmap = new Item1EmbedClass();
[Embed(source = "images/item2.png")]
private var Item2EmbedClass:Class;
private var Item2Bitmap:Bitmap = new Item2EmbedClass();
[Embed(source="images/item3.png")]
private var Item3EmbedClass:Class;
private var Item3Bitmap:Bitmap = new Item3EmbedClass();
public function R()
{
super();
if (ins) return;
ins = this;
}
public function getImage(resourseName:String):Bitmap
{
return this[resourseName];
}
public static function get i():R
{
return ins?ins:new R();
}
}
}