Показать сообщение отдельно
Старый 14.06.2013, 17:43
AlexLucas вне форума Посмотреть профиль Отправить личное сообщение для AlexLucas Найти все сообщения от AlexLucas
  № 7  
Ответить с цитированием
AlexLucas
 
Аватар для AlexLucas

Регистрация: Feb 2011
Сообщений: 431
Код 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;
						}
					}
 
 
				}				              
        }
}
Тащите красный прямоугольник.

NewProject.swf   (1.6 Кб)
Вложения
Тип файла: swf NewProject.swf (1.6 Кб, 135 просмотров)
__________________
Oomph