Показано с 1 по 8 из 8

Тема: Увеличение клипа относительно положения мышки

  1. #1

    Регистрация
    07.06.2007
    Сообщений
    43
    Вообщем, такая проблема.
    Есть клип Base.baseClip, я его уменьшаю или увеличиваю при вращении скрола. Как сделать так, чтобы объект, который находится под мышкой оставался на месте. То есть нужно как-то хитро сдвигать Base.baseClip, чтобы компенсировать увеличение.
    Вот как поступаю я:
    Код:
    mouseListener.onMouseWheel = function(delta:Number) {
     * *Tools.Zoom(2*delta);
    };
    Tools.Zoom - функция масштабирования
    Код:
    private static function Zoom(_zoomDec:Number) {
    ****var newScale:Number = Base.baseClip._xscale+_zoomDec;
    ****var oldX:Number=Base.baseClip._xmouse;
    ****var oldY:Number=Base.baseClip._ymouse;
    ****//не даём слишком увеличить или уменьшить клип *
    ****if (newScale>33 && newScale<300) {
     *Base.baseClip._yscale=Base.baseClip._xscale=newScale;
    ****} else {
     *return;
    ****}
     * * * * * * * *//компенсируем растяжение
    ****Base.baseClip._x-=oldX-Base.baseClip._xmouse;
    ****Base.baseClip._y-=oldY-Base.baseClip._ymouse;
    }
    Всё это работает почти как надо. ПОЧТИ. Просто пи увеличении или уменьшении объект всё-таки сдвигается.
    В чём же дело?
    Я понимаю, что это скорее математика, чем Флеш, но может уже кто-то такое делал? Масштабирование я имею ввиду.
    Или кто-то может привести формулы для масштабирования относительно центра.

  2. #2

    Регистрация
    18.04.2005
    Адрес
    рожденных в CCCP
    Сообщений
    805
    етить не люблю я эти инкрементально декрементальные формулы,
    но в общем ошибка у тебя что ты забыл поправку вставить на новый Scale
    Код:
    private static function Zoom(_zoomDec:Number) {
    var newScale:Number = Base.baseClip._xscale+_zoomDec;
    var oldX:Number=Base.baseClip._xmouse;
    var oldY:Number=Base.baseClip._ymouse;
    //не даём слишком увеличить или уменьшить клип *
    if (newScale>33 && newScale<300) {
     Base.baseClip._yscale=Base.baseClip._xscale=newScale;
    } else {
     return;
    }
    
    //компенсируем растяжение
    Base.baseClip._x-=(oldX-Base.baseClip._xmouse)*Base.baseClip._xscale/100;
    Base.baseClip._y-=(oldY-Base.baseClip._ymouse)*Base.baseClip._yscale/100;
    }

  3. #3

    Регистрация
    07.06.2007
    Сообщений
    43
    Спасибо. Теперь всё работает. постоянно забываю про масштаб.
    Вот мне ещё на одном форуме подсказали решение:
    Код:
    this.onMouseWheel = function(delta:Number)
     {
     * import flash.geom.Point;
     
     * var before:Point = new Point(clip._xmouse, clip._ymouse); // куда указывает мышка
     * var after:Point = before.clone(); // делаем копию той же точки
     * 
     * clip.localToGlobal(before); // переводим исходную точку в глобальную систему координат
     * 
     * * clip._xscale += delta;
     * * clip._yscale = clip._xscale;
     
     * clip.localToGlobal(after); // переводим результирующую точку в глобальную систему координат.
     
     * var offset:Point = before.subtract(after); // на сколько "уползла" в результате масштабирования точка.
     * 
     * clip._x += offset.x;
     * clip._y += offset.y;
     };
     
     Mouse.addListener(this);
    Может кому-то будет интересно.

  4. #4

    Регистрация
    18.04.2005
    Адрес
    рожденных в CCCP
    Сообщений
    805
    тлько в 8ке такой код прокатит,
    в 7й нет объекта Point если мне не изменяет память

  5. #5

    Регистрация
    10.12.2006
    Сообщений
    57
    Люды добры надо сделать мне что-то вроде презентации (swf -> exe),
    в которой будут куча мелких деталей и описаний.
    Для изучения мелочи мне нужно сделать возможность zoommirovaniya.
    Выше перечисленные коды тупо впихивал - нерулит.
    Не знаю чё куда калякать.
    Если есть добры молодцы и красны девицы готовые выручить, готов
    вознести благодарственную молитву.
    Напишите пожалуйста код с краткими пояснениями

  6. #6

    Регистрация
    07.06.2007
    Сообщений
    43
    тупо не нужно. а нужно написать второй скрипт на первый кадр клипа,в котором мелкие детали. должно работать.

  7. #7

    Регистрация
    10.12.2006
    Сообщений
    57
    пробывал но что-то не катит.
    если не сложно киньте кто-нить исходник .fla, думаю так скорее поймётся

  8. #8

    Регистрация
    07.06.2007
    Сообщений
    43
    слелал образец.
    Делается в библиотеке клип GlavniyClip. B этом клипе будут детали. Бросаю его в сцену и называю clip. потом на первый кадр сцены помещаю код. И всё работает.

Похожие темы

  1. Центрирование текста в футере относительно...
    от fenixnt в разделе Вёрстка сайта
    Ответов: 9
    Последнее сообщение: 26.12.2007, 21:18
  2. Проблемы при печати клипа
    от zurmansor в разделе Flash-технологии
    Ответов: 1
    Последнее сообщение: 30.07.2007, 13:53
  3. Определение положения элемента на странице
    от Garret в разделе Веб-программирование
    Ответов: 0
    Последнее сообщение: 21.03.2007, 14:42
  4. Height относительно Width в CSS
    от Skady в разделе Вёрстка сайта
    Ответов: 3
    Последнее сообщение: 12.08.2006, 16:27
  5. хелп visible клипа
    от DAO в разделе Flash-технологии
    Ответов: 2
    Последнее сообщение: 30.03.2006, 17:47

Ваши права

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