Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 1.0/2.0 (http://www.flasher.ru/forum/forumdisplay.php?f=93)
-   -   Обратный зум (http://www.flasher.ru/forum/showthread.php?t=111329)

combo 22.04.2008 13:33

Обратный зум
 
Привет! Не буду напрягать подробностями и просьбой писать большие скрипты. Нужен лишь толчок...

Сделал зум(картинка плавно увеличивается и отцентровывается в том месте, куда щелкнули). Прекрасный обратный зум можно сделать, заменив в некоторых местах знаки(+ на -). Казалось бы все отлично, но есть один большой нюанс...
Картинку в полном размере таскать по экрану не разрешается, увеличенную - можно и нужно(для просмотра). Но при щелчке её еще нужно плавно возвращать в оригинальный размер и на то самое место, где она стояла.
Вот, собственно, в этом и проблема. Как всегда плавно возвращать клип с картинкой, туда где он стоял, не зависимо от его текущих координат?

Psycho Tiger 22.04.2008 13:44

Есть такая идея:
Tween class позволяет делать хорошие анимационные эфекты. Просто сделай движение по 4 свойствам твоей карты: _x, _y, _width и _height. Да, может быть карта будет зумироваться не идеально (хотя по моим представлениям должно быть шикарно), но в итоге она встанет на нужное место с нужной высотой и шириной.

combo 22.04.2008 14:50

Вариант, но я с ним как-то особо не работал. Пока разберусь...
Вот какого типа мне нужно сделать штуку - http://www.zinio.com/express3?issue=...o=int&prev=sub
(там кликаешь на обложку - её можно крутить-вертеть и она ставится обратно)
Может еще есть варианты? Чую, можно по-простому, меняя _x и _y клипа относительно какой-то точкой, по формуле.. Но не представляю как )

Wolsh 22.04.2008 16:00

Что-то я не понял, в чем проблема? Если формулы верны, картинка вернется к своему размеру (_xscale=_yscale=0) и в запомненные (если надо) координаты. Составьте правильно формулу - используйте не просто пошаговый зум от состояния на столько-то, а от состояния к цели.

combo 22.04.2008 19:54

Так я и не говорю, что знаю правильную формулу.. Есть догадки, во всяком случае, что-то приближенное к истине. Вот примерный кусок кода:

Код:

// Находим расстояние между новым положением картинки и дефолтным(28, 80 пох и по у, для полного, вмещаемого в окно размера)
var diff_x = _root.picMovie._x - 28; 
var diff_y = _root.picMovie._y - 80;
// направление движение: если новое положение мувика левее/выше, то перемещать нужно вправо/ниже
var wayX = (diff_x < 28)? 1: -1;
var wayY = (diff_y < 80)? 1: -1;
// меняем знак - расстояние должно быть только положительным
diff_x *= (diff_x < 0)? -1: 1;
diff_y *= (diff_y < 0)? -1: 1;

var ratio_x = diff_x / diff_y;  // узнаём как относится разница x к разнице y 
var ratio_y = diff_y / diff_x;  // по сути - узнаём шаг относительно другого
 
if (ratio_x > ratio_y) {
        var step_x = ratio_x;
        var step_y = 1;
        } else
if (ratio_y > ratio_x) {
        var step_x = 1;
        var step_y = ratio_y;
}

// ну и двигаем
_root.picMovie._x += step_x*wayX;
_root.picMovie._y += step_y*wayY;

Код кривой, но думаю понятный. Смысл сводится к тому, чтобы большее расстояние разделить на меньшее расстояние и получить таким образом больший шаг, приняв меньший за единицу. Например, если новая позиция мувика гораздо дальше съехала по x, чем по y, то и скорость движения по x должна быть больше, дабы мув точно встал на своё место.
Беда одна - если в эту конструкцию включить изменения _x|_yscale, то картинка начинает себя странно вести.. При уменьшении съезжать в стороны и т.п. Да, и пример віше тоже не всегда себя корректно ведёт. Может есть лучший вариант?:umnik2:

combo 23.04.2008 12:49

Вообщем, проблему решил. Вышло не очень аккуратно, но зум очень быстрый, поэтому погрешностей сильно не видно. Зато без глюков, как с шагом. Смысл вот в чём(может кому еще интересно будет).
Перенесенный на новое место(точка B) клип можно вернуть к исходной точке(A), создав массив с координатами следования. Эти данные - число, полученное в результате деления суммы A и B на количество нужных нам шагов(чем больше, тем плавнее движется мувик). Единственное опять-таки возникающее НО - это изменение scale, которое клонит мувик в стороны в зависимости от точки привязки. Но это можно отрегулировать, каждый раз прибавляя/отнимая к точкам следования мувика какое-то число.

qazwsx 23.04.2008 13:16

Нагородил ты.... много лишнего

combo 23.04.2008 14:17

Цитата:

Сообщение от qazwsx (Сообщение 734904)
Нагородил ты.... много лишнего

ну, покажи как проще...

Wolsh 23.04.2008 16:11

а) возвращаем к нужной точке
б) меняем скейл
не обязательно одновременно.
если точка привязки стоит "от балды", исправьте и не мучайтесь.
для программно изменяемых объектов левый верхний угол изображения ставится "в ноль", если конечно не предполагается специфическое вращение.

combo 23.04.2008 17:22

Wolsh, ну это все понятно. К тому же, scale должен обязательно меняться вместе с координатами. Зум, конечно, шустрый, но ведь не настолько, чтобы ничего не разглядеть...
Беда еще и в том, что мувик програмносозданный, а как у таких мувиков менять точку трансформации - из постов на форуме, я так толком и не понял.


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

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