
Код AS3:
package
{
import flash.display.Stage
import flash.display.BitmapData;
import flash.display.Sprite;
import flash.display.StageAlign;
import flash.display.StageScaleMode;
import flash.events.Event;
import flash.filters.GlowFilter;
import flash.geom.Matrix;
import flash.geom.Point;
public class LEDmatrix extends Sprite
{
private var bmpd1:BitmapData;
private var bmpd2:BitmapData;
private var LEDobj:LED;
private var LEDobj2:LED;
private var w:int;
private var h:int;
public function LEDmatrix()
{
if(super.stage)
{
init();
}
else
{
// Получаем размер рабочей области
this.addEventListener(Event.ADDED_TO_STAGE, init);
}
}
public function init(e:Event = null):void
{
if(this.hasEventListener(Event.ADDED_TO_STAGE))
{
this.removeEventListener(Event.ADDED_TO_STAGE, onAdded);
}
stage.align = StageAlign.TOP_LEFT;
stage.scaleMode = StageScaleMode.NO_SCALE;
var w:int = stage.stageWidth;
var h:int = stage.stageHeight;
trace("размер по горизонтали = ",h, "размер по вертикали = ", w);
//создаем две звезды и добавляем их в список отображения
runProgramm();
}
private function runProgramm():void
{
// Определяем размер светодиода
var size:Number = 3;
//Зазор между светодиодами
var LEDgap:Number = size + 6;
// Определяем отступы от краев раб.обл.(слева и сверху); размер светодиода делённый надвое
var identX:Number = size / 2;
var identY:Number = identX;
// Колличество светодиодов по горизонтали
var LEDamtX:Number = Math.ceil(w / LEDgap);
// Колличество светодиодов по вертикали
var LEDamtY:Number = Math.ceil(h / LEDgap);
LEDobj = new LED(60);//рисунок
LEDobj.LEDlight = false;
LEDobj.x = 200;
LEDobj.y = 100;
addChild(LEDobj);
// Строим сетку из светодиодов:
//сначала вертикаль
for (var i:int=0; i<LEDamtX; i++)
{
//затем горизонталь
for (var n:int=0; n<LEDamtY; n++)
{
// Создаём светодиодную матрицу из заранне заготовленных мувиклипов
var LEDobj2:LED = new LED(size);
var xn:Number = i * LEDgap + identX;
var yn:Number = n * LEDgap + identY;
LEDobj2.x = xn;
LEDobj2.y = yn;
LEDobj2.LEDlight = false;//выключаем СВЕТОДИОДЫ
addChild(LEDobj2);
}
}
// создаем два растровых изображения
bmpd1 = new BitmapData(stage.stageWidth,stage.stageHeight,true,0);
bmpd2 = bmpd1.clone();
// очищаем растровые изображения
bmpd1.fillRect(bmpd1.rect, 0);
bmpd2.fillRect(bmpd2.rect, 0);
// отрисовываем каждую звезду в своем растровом изображении
bmpd1.draw(LEDobj, new Matrix(1, 0, 0, 1, LEDobj.x, LEDobj.y));
bmpd2.draw(LEDobj2, new Matrix(1, 0, 0, 1, LEDobj2.x, LEDobj2.y));
// проверяем столкновение
if (bmpd1.hitTest(new Point(), 255, bmpd2, new Point(), 255))
{
LEDobj2.graphics.clear();
LEDobj2.LEDlight = true;// оранджевый
}
else
{
LEDobj.visible = false;
LEDobj.LEDlight = false;// серый
}
}
}
}