Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Поиск рулит! Сообщения за день Все разделы прочитаны
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 3.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 27.09.2013, 20:19
Akopalipsis вне форума Посмотреть профиль Найти все сообщения от Akopalipsis
  № 1  
Ответить с цитированием
Akopalipsis
Banned

Регистрация: Mar 2013
Сообщений: 1,864
Rivexe я опять внимания не обратил))) Спасибо!
Не знаю на сколько правильно ( очень надеюсь , что правильность прокомментируют ) но работает.
Код AS3:
package 
{
	import flash.display.DisplayObject;
	import flash.display.Sprite;
	import flash.events.Event;
	import flash.events.MouseEvent;
	import flash.geom.Point;
 
	public class Drag extends Sprite 
	{
		private var _container:Sprite;
 
		private var _spriteArray:Vector.<Sprite>;
 
		private var _conteinersArray:Vector.<Sprite>;
 
		private var _distantion:Point;
		private var _target:Sprite;
 
		private var _maxX:int;
		private var _maxY:int;
		private var _minX:int;
		private var _minY:int;
 
		public function Drag() 
		{
			if (stage) init();
			else addEventListener(Event.ADDED_TO_STAGE, init);
		}
 
		private function init(event:Event=null):void 
		{
			removeEventListener(Event.ADDED_TO_STAGE, init);
 
			_conteinersArray = Vector.<Sprite>([]);
 
			this.addEventListener(MouseEvent.MOUSE_DOWN, this_mouseDownHandler);
			_container = new Sprite();
			_conteinersArray.push(_container);
			super.addChild(_container);
			var circle:Sprite;
			_spriteArray = Vector.<Sprite>([]);
 
 
			for (var i:int = 0; i < 10; i++) 
			{
				circle = new Sprite();
				circle.graphics.beginFill(Math.random() * 0xf6f6f6);
				circle.graphics.drawCircle(Math.random() * stage.stageWidth, Math.random() * stage.stageHeight, 30);
				circle.graphics.endFill();
				_spriteArray.push(circle);
				_container.addChild(_spriteArray[i] as DisplayObject);
			}
 
			_maxX = this.width;
			_maxY = this.height;
 
			_minX = this.width - this.width;
			_minY = this.height - this.height;
 
		}
 
		private function this_mouseDownHandler(event:MouseEvent):void 
		{
			if (_conteinersArray.indexOf(event.target > 0))
			{
				this.addEventListener(MouseEvent.MOUSE_UP, this_mouseUpHandler);
				stage.addEventListener(MouseEvent.MOUSE_MOVE, this_mouseMoveHandler);
				_target = event.target.parent as Sprite;
				_distantion = new Point(event.localX, event.localY);
			}
		}
 
		private function this_mouseUpHandler(event:MouseEvent):void 
		{
			this.removeEventListener(MouseEvent.MOUSE_UP, this_mouseUpHandler);
			stage.removeEventListener(MouseEvent.MOUSE_MOVE, this_mouseMoveHandler);
		}
		private function this_mouseMoveHandler(event:MouseEvent):void 
		{
			if (mouseX > _maxX || mouseX < _minX || mouseY > _maxY || mouseY < _minY) 
			{
				stage.removeEventListener(MouseEvent.MOUSE_MOVE, this_mouseMoveHandler);
				this.removeEventListener(MouseEvent.MOUSE_UP, this_mouseUpHandler);
				_target = null;
				_distantion = null;
				return;
			}
			_target.x =  mouseX - _distantion.x;
			_target.y = mouseY - _distantion.y;
			event.updateAfterEvent();
		}
 
	}
 
}

Старый 27.09.2013, 20:24
kelod вне форума Посмотреть профиль Отправить личное сообщение для kelod Найти все сообщения от kelod
  № 2  
Ответить с цитированием
kelod

Регистрация: Jan 2012
Сообщений: 97
Цитата:
Сообщение от Akopalipsis Посмотреть сообщение
Rivexe я опять внимания не обратил))) Спасибо!
Не знаю на сколько правильно ( очень надеюсь , что правильность прокомментируют ) но работает.
Код AS3:
package 
{
	import flash.display.DisplayObject;
	import flash.display.Sprite;
	import flash.events.Event;
	import flash.events.MouseEvent;
	import flash.geom.Point;
 
	public class Drag extends Sprite 
	{
		private var _container:Sprite;
 
		private var _spriteArray:Vector.<Sprite>;
 
		private var _conteinersArray:Vector.<Sprite>;
 
		private var _distantion:Point;
		private var _target:Sprite;
 
		private var _maxX:int;
		private var _maxY:int;
		private var _minX:int;
		private var _minY:int;
 
		public function Drag() 
		{
			if (stage) init();
			else addEventListener(Event.ADDED_TO_STAGE, init);
		}
 
		private function init(event:Event=null):void 
		{
			removeEventListener(Event.ADDED_TO_STAGE, init);
 
			_conteinersArray = Vector.<Sprite>([]);
 
			this.addEventListener(MouseEvent.MOUSE_DOWN, this_mouseDownHandler);
			_container = new Sprite();
			_conteinersArray.push(_container);
			super.addChild(_container);
			var circle:Sprite;
			_spriteArray = Vector.<Sprite>([]);
 
 
			for (var i:int = 0; i < 10; i++) 
			{
				circle = new Sprite();
				circle.graphics.beginFill(Math.random() * 0xf6f6f6);
				circle.graphics.drawCircle(Math.random() * stage.stageWidth, Math.random() * stage.stageHeight, 30);
				circle.graphics.endFill();
				_spriteArray.push(circle);
				_container.addChild(_spriteArray[i] as DisplayObject);
			}
 
			_maxX = this.width;
			_maxY = this.height;
 
			_minX = this.width - this.width;
			_minY = this.height - this.height;
 
		}
 
		private function this_mouseDownHandler(event:MouseEvent):void 
		{
			if (_conteinersArray.indexOf(event.target > 0))
			{
				this.addEventListener(MouseEvent.MOUSE_UP, this_mouseUpHandler);
				stage.addEventListener(MouseEvent.MOUSE_MOVE, this_mouseMoveHandler);
				_target = event.target.parent as Sprite;
				_distantion = new Point(event.localX, event.localY);
			}
		}
 
		private function this_mouseUpHandler(event:MouseEvent):void 
		{
			this.removeEventListener(MouseEvent.MOUSE_UP, this_mouseUpHandler);
			stage.removeEventListener(MouseEvent.MOUSE_MOVE, this_mouseMoveHandler);
		}
		private function this_mouseMoveHandler(event:MouseEvent):void 
		{
			if (mouseX > _maxX || mouseX < _minX || mouseY > _maxY || mouseY < _minY) 
			{
				stage.removeEventListener(MouseEvent.MOUSE_MOVE, this_mouseMoveHandler);
				this.removeEventListener(MouseEvent.MOUSE_UP, this_mouseUpHandler);
				_target = null;
				_distantion = null;
				return;
			}
			_target.x =  mouseX - _distantion.x;
			_target.y = mouseY - _distantion.y;
			event.updateAfterEvent();
		}
 
	}
 
}
примерно так и я сделал, разве что переменных столько не объявлял, мне не нравится такое решение, но наверно по другому не как не выйдет, ладно спасибо пусть так и будет

Создать новую тему Ответ Часовой пояс GMT +4, время: 07:33.
Быстрый переход
  « Предыдущая тема | Следующая тема »  
Опции темы
Опции просмотра
Комбинированный вид Комбинированный вид

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


Часовой пояс GMT +4, время: 07:33.


Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.