
Код AS3:
package
{
import fl.controls.Button;
import fl.controls.TextInput;
import flash.display.Sprite;
import flash.events.Event;
import flash.events.FocusEvent;
import flash.events.KeyboardEvent;
import flash.events.MouseEvent;
import flash.text.TextField;
import flash.text.TextFieldAutoSize;
public class Main extends Sprite
{
private var dragObject:Sprite = new Sprite();
private var initOffsetX:Number;
private var initOffsetY:Number; //изначальная разница между коорд. объекта и мыши
private var snapCoordArray:Array = new Array(); //массив координат к которым цепляем объект
private const snapDistance:Number = 10; //расстояние на которое должен приблизиться объект к прямой чтобы его можно было прицепить
public function Main()
{
this.graphics.beginFill(0x000000, 0.1);
this.graphics.drawRect(0, 0, stage.stageWidth, stage.stageHeight);
//рисуем объект который будем таскать
dragObject.graphics.beginFill(0xff0000);
dragObject.graphics.drawRect(0, 0, 30, 30);
dragObject.addEventListener(MouseEvent.MOUSE_DOWN, prepareToDrag);
addChild(dragObject);
dragObject.x = 50; dragObject.y = 50;
this.graphics.lineStyle(1, 0x000000);
//задаём координаты к которым будем цеплять
snapCoordArray.push( { y:150 }, { y:200 } );
//рисуем направляющие
for (var i:int = 0; i < snapCoordArray.length; i++)
{
this.graphics.moveTo(0, snapCoordArray[i].y);
this.graphics.lineTo(stage.width, snapCoordArray[i].y);
}
}
private function prepareToDrag(e:MouseEvent):void
{
initOffsetX = e.stageX - dragObject.x;
initOffsetY = e.stageY - dragObject.y;
stage.addEventListener(MouseEvent.MOUSE_MOVE, drag);
stage.addEventListener(MouseEvent.MOUSE_UP, endDrag);
}
private function endDrag(e:MouseEvent):void
{
stage.removeEventListener(MouseEvent.MOUSE_MOVE, drag);
stage.removeEventListener(MouseEvent.MOUSE_UP, endDrag);
}
private function drag(e:MouseEvent):void
{
var rule:Object;
dragObject.y = e.stageY - initOffsetY;
dragObject.x = e.stageX - initOffsetX;
for (var i:int = 0; i < snapCoordArray.length; i++)
{
rule = snapCoordArray[i];
if (/*проверяем верх*/dragObject.y < rule.y + snapDistance && dragObject.y > rule.y - snapDistance)
{
dragObject.y = rule.y;
break;
}
if (/*проверяем низ*/ dragObject.y + dragObject.height < rule.y + snapDistance && dragObject.y + dragObject.height > rule.y - snapDistance)
{
dragObject.y = rule.y - dragObject.height;
break;
}
}
}
}
}
Тащите красный прямоугольник.