![]() |
Изменение изображения путем перемещения маркера
Здравствуйте
Подскажите, пожалуйста, как реализовать изменение высоты и ширины изображения, путем передвижения маркера. Изображение подгружено в спрайт. Спасибо |
Есть изначальные координаты маркера, меняя его положение меняются его координаты. Исходя из этих данных несложно вычислить и изменить новые размеры изображения.
|
если я правильно понял задачу..
например, для случая если маркер находится в нижнем правом углу изображения Код AS1/AS2:
|
В AS2 я делала с помощью onEnterFrame, запускала эту ф-цию в момент перетаскивания, какой аналог или как сделать это на AS3?
|
Event.ENTER_FRAME напрашивается... можно по MouseEvent.MOUSE_MOVE
|
А как сделать, чтоб маркер который мы передвигаем, двигался только по прямой. Получается по диагонали картинки
|
Ну так проверяйте каждый раз, не выходит ли маркер за допустимые координаты. Или startDrag вам в помощь с заданием ограничений (подробнее в хелпе все расписано, но это только для ортогональных системы координат, соответственно, можете двигать маркер в своем прямоугольнике заданном). Если надо только по диагонали и никак иначе - пишите сами. Обычно при этом надо контролировать одно направление (например, большее - запоминаете предыдущее значение и сравниваете по x и y, маркер ушел дальше), по нему высчитывать scale по одной оси и делать такой же по другой.
Update: подумал, что большее значение и не к чему, просто смотрите, куда у вас идет маркер по оси X, а дальше двигайте его по Y исходя из соотношения сторон картинки. Но будьте готовы к тому, что в этом случае часто будет курсор уходить с маркера, в зависимости от движений мыши... |
Цитата:
|
Цитата:
|
Тут нет геометрии по сути. Простые арифметические действия. Есть координаты и размеры картинки. В момент опускания мыши на маркер запоминаете координаты курсора, подписываетесь событие движения мыши. Дальше двигая мышь, изменяются координаты курсора. Вычитая из текущих координат курсора сохраненные (в момент когда нажали кнопку мыши) узнаем величину на которую нужно изменить размер изображение по той или иной оси (ширину или высоту).
Меняем на эту величину размеры изображения (прибавляя то что вышло в разнице координат) и смещаем на маркер на новую позицию, ведь новые размеры опять известны и пристыковать маркер на свое место тоже не проблема. Примерчик: Была картинка 50х50 пикселей в координатах x=10 и y=10, взялись за нижний центральный маркер (т.е. нажали кнопку мыши), запомнили координаты мыши (это примерно x=35 и y=60) и отодвинули мышь вниз на координты x=40 (это мы не учитываем, т.к. нас только высота интересует) и y=75. Теперь считаем 75-60=15, значит высоту картинки нужно изменить на 15 пикселей (yourImage.height +=15) и смещаем маркер на координаты x=35 и y=75. Повторяем эти операции пока не отпустим кнопку мыши. |
2 Mur4ik
Это же только тогда, когда длина полоски перетаскивания маркера равна той стороне, которую изменяет маркер, верно? 2 greenhill Вообще нужно вычислить, чему равны пиксели в одном проценте от длины трека бегунка, затем перевести в десятичную дробь и текущее положение бегунка разделить на полученное значение. Получается, что если бегунок находится по середине трека, что означает 100%, и мы его двигаем, скажем, вверх, то должно произойти уменьшение картинки, то есть будет меньше 100%. Так же и наоборот. координатаБегунка / (общаяДлинаТрека / 100)) / 100) Вот как-то так я реализовывал скролл громкости. |
2 КорДум, при чем здесь скролл?
Я так понял маркеры имеются ввиду как по типу в графических редакторах (маленькие квадратики по углам и центрам сторон изображения, таская которые, меняются параметры изображения). |
это вроде ясно, а как двигать маркер, но чтоб он при этом двигался только по диагонали, под углом 45 градусов?
|
Цитата:
Например чтоб двигать вверх-вправо нужно Код AS3:
|
На одинаковую величину?
Но так ничего не меняется по сути. Надо чтоб маркер двигался по линии, когда я его двигаю. Чтоб за границы этой линии он не выходил. То есть его движения ограничены линией под 45 градусов. Что-то я не понимаю, сори :( |
Цитата:
Код AS3:
Но это в случае если изображение у вас квадратное всегда. |
2 Mur4ik
ууу, точно, пардон. |
Ага, это вроде понятно.
Чтоб просто двигать объектом у меня был такой когд: Код AS3:
|
Вложений: 1
убирайте sprite_marker.start/stopDrag();
вместо Код AS3:
Код AS3:
|
Спасибо огромное. Я вас уже люблю :)
|
| Часовой пояс GMT +4, время: 08:17. |
Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.