flash on 2011-7-22
created by Ivan Salnik
/**
* Copyright gnuapp ( http://wonderfl.net/user/gnuapp )
* MIT License ( http://www.opensource.org/licenses/mit-license.php )
* Downloaded from: http://wonderfl.net/c/iIMS
*/
package {
/*
*created by Ivan Salnik
*/
import flash.display.Sprite;
import flash.display.Graphics;
import flash.events.MouseEvent;
import flash.geom.Point;
public class FlashTest extends Sprite {
private var p:Point;
private var container:Sprite;
private var square:Sprite;
private var buttonDrag:Sprite;
//CONSTRUCTOR
public function FlashTest() {
container = new Sprite();
addChild(container);
buttonDrag = createSquare(20, 20, 0xFF0000);
//создание основы и добавления в список отображения контейнера
square = createSquare(100, 100);
container.addChild(square);
//Выравнивание окна по центру
container.x = stage.stageWidth/2 - container.width/2;
container.y = stage.stageHeight/2 - container.height/2;
square.addEventListener(MouseEvent.MOUSE_DOWN, containerDown);
stage.addEventListener(MouseEvent.MOUSE_UP, stageMouseUp);
//создание кнопки и добавления в список отображения контейнера
container.addChild(buttonDrag);
buttonDrag.x = square.width - buttonDrag.width;
buttonDrag.y = square.height - buttonDrag.height;
buttonDrag.addEventListener(MouseEvent.MOUSE_DOWN, mouseDownDrag);
}
//функция рисует окно и кнопку по заданным параметрам и возвращает результат
private function createSquare(initWidth:int, initHeight:int, color:uint = 0x0000FF):Sprite {
var square:Sprite = new Sprite()
square.graphics.beginFill(color);
square.graphics.drawRect(0, 0, initWidth, initHeight);
square.graphics.endFill();
return square;
}
//функция перерисовывает окно с новыми размерами при перемещении кнопки
private function updateSet(initWidth:int, initHeight:int, color:uint = 0x0000FF):void {
square.graphics.clear();
square.graphics.beginFill(color);
square.graphics.drawRect(0, 0, initWidth, initHeight);
square.graphics.endFill();
}
private function mouseDownDrag(e:MouseEvent):void {
stage.addEventListener(MouseEvent.MOUSE_MOVE, mouseMoveDrag);
}
private function mouseMoveDrag(e:MouseEvent):void {
p = new Point(container.mouseX, container.mouseY);//обновление координат курсора
buttonDrag.x = Math.max(this.localToGlobal(p).x, 50)//перевод локальных координат container в глобальные, (Math.max) - высчитывает минимальное значение
buttonDrag.y = Math.max(this.localToGlobal(p).y, 70)//перевод локальных координат container в глобальные
updateSet(buttonDrag.x+buttonDrag.width, buttonDrag.y+buttonDrag.height);
e.updateAfterEvent();//обновление визуализации, если список отображения был изменен
}
//удаляет событие слижения за мышью и останавливает перетаскивания окна
private function stageMouseUp(e:MouseEvent):void {
stage.removeEventListener(MouseEvent.MOUSE_MOVE, mouseMoveDrag);
container.stopDrag();
}
//перетаскивание окна
private function containerDown(e:MouseEvent):void {
container.startDrag();
}
}//class
}//package