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

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

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

Регистрация: Jul 2007
Сообщений: 46
По умолчанию Free Transform Manager, добавление границ

Привет!
Я использую вот этот 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

Код AS3:
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);
 
                }
 
            }
        }
Проверка hitTest:
Код AS3:
private function testHit():Boolean         
{
             for (var i:String in _bounds)
                 if (_bounds[i].hitTestObject(transformContainer))
                     return true;
             return false;
}
Конструктор:
Код AS3:
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.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

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

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


 


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


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