Форум 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)

КорДум 21.07.2010 14:39

2 Mur4ik
Это же только тогда, когда длина полоски перетаскивания маркера равна той стороне, которую изменяет маркер, верно?

2 greenhill
Вообще нужно вычислить, чему равны пиксели в одном проценте от длины трека бегунка, затем перевести в десятичную дробь и текущее положение бегунка разделить на полученное значение. Получается, что если бегунок находится по середине трека, что означает 100%, и мы его двигаем, скажем, вверх, то должно произойти уменьшение картинки, то есть будет меньше 100%. Так же и наоборот.

координатаБегунка / (общаяДлинаТрека / 100)) / 100)
Вот как-то так я реализовывал скролл громкости.

Mur4ik 21.07.2010 14:42

2 КорДум, при чем здесь скролл?
Я так понял маркеры имеются ввиду как по типу в графических редакторах (маленькие квадратики по углам и центрам сторон изображения, таская которые, меняются параметры изображения).

greenhill 21.07.2010 14:44

это вроде ясно, а как двигать маркер, но чтоб он при этом двигался только по диагонали, под углом 45 градусов?

Mur4ik 21.07.2010 14:45

Цитата:

Сообщение от greenhill (Сообщение 923861)
это вроде ясно, а как двигать маркер, но чтоб он при этом двигался только по диагонали, под углом 45 градусов?

Очевидно нужно прибавлять на одинаковую величину и по "x" и по "y". Только знаки могут быть разным в зависимости от направления.
Например чтоб двигать вверх-вправо нужно
Код AS3:

marker.x += 20;
marker.y -= 20;


greenhill 21.07.2010 14:48

На одинаковую величину?
Но так ничего не меняется по сути. Надо чтоб маркер двигался по линии, когда я его двигаю. Чтоб за границы этой линии он не выходил. То есть его движения ограничены линией под 45 градусов. Что-то я не понимаю, сори :(

Mur4ik 21.07.2010 14:57

Цитата:

Сообщение от greenhill (Сообщение 923863)
На одинаковую величину?
Но так ничего не меняется по сути. Надо чтоб маркер двигался по линии, когда я его двигаю. Чтоб за границы этой линии он не выходил. То есть его движения ограничены линией под 45 градусов. Что-то я не понимаю, сори :(

Например ваш маркер находится в координатах 10,10 и вам нужно двигать его вправо-вверх под углом 45 градусов, значит нужно к текущей "х" координате прибавлять некую величину (назовем ее offset), а к текущей "у" координате прибавлять -offset (потому что положительные значения по "y" направлены вниз, а двигать нам нужно верх).

Код AS3:

// вправо-вверх
marker.x += offset;
marker.y -= offset;
 
// вправо-вниз
marker.x += offset;
marker.y += offset;
 
// влево-вверх
marker.x -= offset;
marker.y -= offset;
 
// влево-вниз
marker.x -= offset;
marker.y += offset;

Т.е. смещая на одинаковые расстояния положение маркера вы ограничиваете его линией, которая как раз и направлена под углом 45 градусов.
Но это в случае если изображение у вас квадратное всегда.

КорДум 21.07.2010 15:03

2 Mur4ik
ууу, точно, пардон.

greenhill 21.07.2010 15:08

Ага, это вроде понятно.
Чтоб просто двигать объектом у меня был такой когд:
Код AS3:

private function markerDown(event:MouseEvent){
        var sprite_marker:Sprite = Sprite(event.target);
        sprite_marker.startDrag();
            sprite_marker.addEventListener(MouseEvent.MOUSE_MOVE, markerMove);     
                }
 
        private function markerUp(event:MouseEvent){
            var sprite_marker:Sprite = Sprite(event.target);
            sprite_marker.stopDrag();
                        sprite_marker.removeEventListener(MouseEvent.MOUSE_MOVE, markerMove);
                }
 
        private function markerMove(event:MouseEvent):void {
              event.updateAfterEvent();
 
        }

Чтоб мне перемещать по диагонали, стартДраг мне уже не нужен. На что мне его заменить?

Mur4ik 21.07.2010 15:45

Вложений: 1
убирайте sprite_marker.start/stopDrag();

вместо
Код AS3:

sprite_marker.addEventListener(MouseEvent.MOUSE_MOVE, markerMove); 
...
sprite_marker.removeEventListener(MouseEvent.MOUSE_MOVE, markerMove);

нужно
Код AS3:

stage.addEventListener(MouseEvent.MOUSE_MOVE, markerMove); 
...
stage.removeEventListener(MouseEvent.MOUSE_MOVE, markerMove);

и в markerMove меняйте размеры изображения и относительно измененных размеров изображения меняйте положение вашего маркера.

greenhill 21.07.2010 16:07

Спасибо огромное. Я вас уже люблю :)


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

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