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

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

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

Регистрация: Nov 2006
Сообщений: 177
По умолчанию Обратный зум

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

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

Старый 22.04.2008, 13:44
Psycho Tiger вне форума Посмотреть профиль Отправить личное сообщение для Psycho Tiger Найти все сообщения от Psycho Tiger
  № 2  
Ответить с цитированием
Psycho Tiger
 
Аватар для Psycho Tiger

блогер
Регистрация: Jun 2005
Адрес: Toronto
Сообщений: 6,599
Записей в блоге: 17
Есть такая идея:
Tween class позволяет делать хорошие анимационные эфекты. Просто сделай движение по 4 свойствам твоей карты: _x, _y, _width и _height. Да, может быть карта будет зумироваться не идеально (хотя по моим представлениям должно быть шикарно), но в итоге она встанет на нужное место с нужной высотой и шириной.

Старый 22.04.2008, 14:50
combo вне форума Посмотреть профиль Отправить личное сообщение для combo Найти все сообщения от combo
  № 3  
Ответить с цитированием
combo
 
Аватар для combo

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

Старый 22.04.2008, 16:00
Wolsh вне форума Посмотреть профиль Отправить личное сообщение для Wolsh Найти все сообщения от Wolsh
  № 4  
Ответить с цитированием
Wolsh
Нуб нубам
 
Аватар для Wolsh

модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
Что-то я не понял, в чем проблема? Если формулы верны, картинка вернется к своему размеру (_xscale=_yscale=0) и в запомненные (если надо) координаты. Составьте правильно формулу - используйте не просто пошаговый зум от состояния на столько-то, а от состояния к цели.
__________________
Reality.getBounds(this);

Старый 22.04.2008, 19:54
combo вне форума Посмотреть профиль Отправить личное сообщение для combo Найти все сообщения от combo
  № 5  
Ответить с цитированием
combo
 
Аватар для combo

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

Код:
// Находим расстояние между новым положением картинки и дефолтным(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, то картинка начинает себя странно вести.. При уменьшении съезжать в стороны и т.п. Да, и пример віше тоже не всегда себя корректно ведёт. Может есть лучший вариант?


Последний раз редактировалось combo; 22.04.2008 в 19:57.
Старый 23.04.2008, 12:49
combo вне форума Посмотреть профиль Отправить личное сообщение для combo Найти все сообщения от combo
  № 6  
Ответить с цитированием
combo
 
Аватар для combo

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


Последний раз редактировалось combo; 23.04.2008 в 12:51.
Старый 23.04.2008, 13:16
qazwsx вне форума Посмотреть профиль Найти все сообщения от qazwsx
  № 7  
Ответить с цитированием
qazwsx
Banned
[+5 15.02.09]
[++5 15.02.09]

Регистрация: Mar 2008
Адрес: Krasnoyarsk
Сообщений: 587
Нагородил ты.... много лишнего

Старый 23.04.2008, 14:17
combo вне форума Посмотреть профиль Отправить личное сообщение для combo Найти все сообщения от combo
  № 8  
Ответить с цитированием
combo
 
Аватар для combo

Регистрация: Nov 2006
Сообщений: 177
Цитата:
Сообщение от qazwsx Посмотреть сообщение
Нагородил ты.... много лишнего
ну, покажи как проще...

Старый 23.04.2008, 16:11
Wolsh вне форума Посмотреть профиль Отправить личное сообщение для Wolsh Найти все сообщения от Wolsh
  № 9  
Ответить с цитированием
Wolsh
Нуб нубам
 
Аватар для Wolsh

модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
а) возвращаем к нужной точке
б) меняем скейл
не обязательно одновременно.
если точка привязки стоит "от балды", исправьте и не мучайтесь.
для программно изменяемых объектов левый верхний угол изображения ставится "в ноль", если конечно не предполагается специфическое вращение.
__________________
Reality.getBounds(this);

Старый 23.04.2008, 17:22
combo вне форума Посмотреть профиль Отправить личное сообщение для combo Найти все сообщения от combo
  № 10  
Ответить с цитированием
combo
 
Аватар для combo

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

Создать новую тему Ответ Часовой пояс GMT +4, время: 01:51.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Теги
зум

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

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


 


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


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