Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Изменение изображения путем перемещения маркера (http://www.flasher.ru/forum/showthread.php?t=142421)

greenhill 20.07.2010 20:07

Изменение изображения путем перемещения маркера
 
Здравствуйте
Подскажите, пожалуйста, как реализовать изменение высоты и ширины изображения, путем передвижения маркера.
Изображение подгружено в спрайт.

Спасибо

Mur4ik 20.07.2010 21:18

Есть изначальные координаты маркера, меняя его положение меняются его координаты. Исходя из этих данных несложно вычислить и изменить новые размеры изображения.

derhab 20.07.2010 21:21

если я правильно понял задачу..
например, для случая если маркер находится в нижнем правом углу изображения
Код AS1/AS2:

img.width = marker.х - img.х;
img.height = marker.y - img.y;

это при условии, что img имеет нулевую координату в своем левом верхнем углу и img и marker находятся в одном координатном пространстве, если нет, то пересчитывать локальные координаты в глобальные..

greenhill 20.07.2010 22:09

В AS2 я делала с помощью onEnterFrame, запускала эту ф-цию в момент перетаскивания, какой аналог или как сделать это на AS3?

Hidest 20.07.2010 23:44

Event.ENTER_FRAME напрашивается... можно по MouseEvent.MOUSE_MOVE

greenhill 20.07.2010 23:52

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

Hidest 21.07.2010 01:47

Ну так проверяйте каждый раз, не выходит ли маркер за допустимые координаты. Или startDrag вам в помощь с заданием ограничений (подробнее в хелпе все расписано, но это только для ортогональных системы координат, соответственно, можете двигать маркер в своем прямоугольнике заданном). Если надо только по диагонали и никак иначе - пишите сами. Обычно при этом надо контролировать одно направление (например, большее - запоминаете предыдущее значение и сравниваете по x и y, маркер ушел дальше), по нему высчитывать scale по одной оси и делать такой же по другой.

Update: подумал, что большее значение и не к чему, просто смотрите, куда у вас идет маркер по оси X, а дальше двигайте его по Y исходя из соотношения сторон картинки. Но будьте готовы к тому, что в этом случае часто будет курсор уходить с маркера, в зависимости от движений мыши...

derhab 21.07.2010 04:00

Цитата:

Сообщение от Hidest (Сообщение 923794)
просто смотрите .. Но будьте готовы к тому, что.

а вот это правильно

greenhill 21.07.2010 12:38

Цитата:

Сообщение от Mur4ik (Сообщение 923735)
Есть изначальные координаты маркера, меняя его положение меняются его координаты. Исходя из этих данных несложно вычислить и изменить новые размеры изображения.

Вот мне сложно вычислить. Туго с геометрией в программировании. Может есть примерчик?

Mur4ik 21.07.2010 14:26

Тут нет геометрии по сути. Простые арифметические действия. Есть координаты и размеры картинки. В момент опускания мыши на маркер запоминаете координаты курсора, подписываетесь событие движения мыши. Дальше двигая мышь, изменяются координаты курсора. Вычитая из текущих координат курсора сохраненные (в момент когда нажали кнопку мыши) узнаем величину на которую нужно изменить размер изображение по той или иной оси (ширину или высоту).

Меняем на эту величину размеры изображения (прибавляя то что вышло в разнице координат) и смещаем на маркер на новую позицию, ведь новые размеры опять известны и пристыковать маркер на свое место тоже не проблема.

Примерчик:
Была картинка 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. Повторяем эти операции пока не отпустим кнопку мыши.


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

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