Показать сообщение отдельно
Старый 27.09.2009, 12:32
acid_lab вне форума Посмотреть профиль Отправить личное сообщение для acid_lab Найти все сообщения от acid_lab
  № 5  
Ответить с цитированием
acid_lab

Регистрация: Aug 2009
Сообщений: 12
Но насколько я понимаю, теперь как только мыш попытается забрать объект из наших границ - объект просто будет брошен на данной границе и действие прекратиться. Правильно? ) Эт не есть хорошо. Есть другой выход? Или переписывать библиотеку?

Добавлено через 1 час 31 минуту
Вобщем оптимально это решается действительно самой сменой библиотеки.

Если кому надо решение - добавляем и переписываем TransformTool.as:

Код AS3:
		private var _maxX1:Number = 0;
		private var _maxY1:Number = 0;
		private var _maxX2:Number = Infinity;
		private var _maxY2:Number = Infinity;
 
//..........
 
		public function get maxX1():Number { return _maxX1;	}
		public function set maxX1(n:Number):void { 	_maxX1 = n;	}
		public function get maxY1():Number { return _maxY1;	}
		public function set maxY1(n:Number):void { 	_maxY1 = n;	}
		public function get maxY2():Number { return _maxY2;	}
		public function set maxY2(n:Number):void { 	_maxY2 = n;	}
		public function get maxX2():Number { return _maxX2;	}
		public function set maxX2(n:Number):void { 	_maxX2 = n;	}
 
//.....................
 
		private function enforceLimits():void {
 
			var currScale:Number;
			var angle:Number;
			var enforced:Boolean = false;
 
			// use global matrix
			var _globalMatrix:Matrix = _toolMatrix.clone();
			_globalMatrix.concat(transform.concatenatedMatrix);
 
			// check current scale in X
			currScale = Math.sqrt(_globalMatrix.a * _globalMatrix.a + _globalMatrix.b * _globalMatrix.b);
			if (currScale > _maxScaleX) {
				// set scaleX to no greater than _maxScaleX
				angle = Math.atan2(_globalMatrix.b, _globalMatrix.a);
				_globalMatrix.a = Math.cos(angle) * _maxScaleX;
				_globalMatrix.b = Math.sin(angle) * _maxScaleX;
				enforced = true;
			}
 
			// check current scale in Y
			currScale = Math.sqrt(_globalMatrix.c * _globalMatrix.c + _globalMatrix.d * _globalMatrix.d);
			if (currScale > _maxScaleY) {
				// set scaleY to no greater than _maxScaleY
				angle= Math.atan2(_globalMatrix.c, _globalMatrix.d);
				_globalMatrix.d = Math.cos(angle) * _maxScaleY;
				_globalMatrix.c = Math.sin(angle) * _maxScaleY;
				enforced = true;
			}
 
 
			if (_globalMatrix.tx < _maxX1) {
				_globalMatrix.tx = _maxX1;
				enforced = true;
			}
 
			if (_globalMatrix.tx > _maxX2) {
				_globalMatrix.tx = _maxX2;
				enforced = true;
			}
 
			if (_globalMatrix.ty < _maxY1) {
				_globalMatrix.ty = _maxY1;
				enforced = true;
			}
 
			if (_globalMatrix.ty > _maxY2) {
				_globalMatrix.ty = _maxY2;
				enforced = true;
			}
 
 
 
			// if scale was enforced, apply to _toolMatrix
			if (enforced) {
				_toolMatrix = _globalMatrix;
				var current:Matrix = transform.concatenatedMatrix;
				current.invert();
				_toolMatrix.concat(current);
			}
		}


Последний раз редактировалось acid_lab; 27.09.2009 в 14:06.