![]() |
|
||||||||||
|
|||||||
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | Опции просмотра |
|
![]() |
![]() |
|
|||||
|
Регистрация: Jul 2007
Сообщений: 46
|
Привет!
Я использую вот этот transform manager: http://blog.ryantan.net/2010/08/free-transform-manager/ И пытаюсь ограничить область трансформации: http://ki44321.ho.ua/testmanager/ Но получается совсем криво. Вот исходник (FlashDevelop project): http://ki44321.ho.ua/testmanager/source.rar Я наследую класс FreeTransformManager и переопределяю функцию onStageMMove override protected function onStageMMove(evt:MouseEvent):void { if (mIsDown) { var currX:Number; var currY:Number; var flag:Boolean = true; currX = stage.mouseX; currY = stage.mouseY; dX = currX - oriX; dY = currY - oriY; if (mode == 0) { //moving if (_bounds.left.hitTestObject(transformContainer)) if (dX < 0) flag = false; if (_bounds.right.hitTestObject(transformContainer)) if (dX > 0) flag = false; if (_bounds.top.hitTestObject(transformContainer)) if (dY < 0) flag = false; if (_bounds.bottom.hitTestObject(transformContainer)) if (dY > 0) flag = false; if(flag) onTranslate(dX, dY); } else { ///scale currX = me.mouseX; currY = me.mouseY; var currAngle:Number = getAngleFromMouseCoord(currX, currY, oriCP); //trace('currAngle=' + currAngle); dAngle = currAngle - oriAngle; //trace('dAngle=' + dAngle); var newDist:Number = Math.sqrt(Math.pow(currX - oriCP.x, 2) + Math.pow(currY - oriCP.y, 2)); var percentage:Number = newDist / oriDist; //trace('newDist=' + newDist + ', oriDist=' + oriDist + ', percentage=' + percentage); if (testHit() && percentage > 1) return flag = true; if (_bounds.left.hitTestObject(transformContainer)) if ((dY < 0 && dAngle>0) || (dY > 0 && dAngle<0)) flag = false; if (_bounds.right.hitTestObject(transformContainer)) if ((dY < 0 && dAngle>0) || (dY > 0 && dAngle<0)) flag = false; if (_bounds.top.hitTestObject(transformContainer)) if ((dY < 0 && dAngle>0) || (dY > 0 && dAngle<0)) flag = false; if (_bounds.bottom.hitTestObject(transformContainer)) if ((dX < 0 && dAngle>0) || (dX > 0 && dAngle<0)) flag = false; if(flag) onTransform(dAngle, percentage); clear(); drawLine(oriCP.x, oriCP.y, currX, currY, 0x110000); drawLine(oriCP.x, oriCP.y, oriX, oriY, 0x001100); } } } private function testHit():Boolean { for (var i:String in _bounds) if (_bounds[i].hitTestObject(transformContainer)) return true; return false; } private var _bounds:Object = { }; private var _isTest:Boolean = false; // bounds movieClip со сцены, в котором расположенны 4 мувика: // левая граница, нижняя граница, правая и верхняя граница public function TransformManagerBounds(bounds:MovieClip, showInterestingStuff:Boolean = false) { if (bounds && bounds.l && bounds.r && bounds.t && bounds.b) { _bounds.left = bounds.l; _bounds.right = bounds.r; _bounds.top = bounds.t; _bounds.bottom = bounds.b; } else return; } Последний раз редактировалось Adskij; 15.11.2010 в 17:46. |
![]() |
![]() |
Часовой пояс GMT +4, время: 02:14. |
|
|
« Предыдущая тема | Следующая тема » |
|
|