Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Координаты после stopDrag() (http://www.flasher.ru/forum/showthread.php?t=119957)

MadSorcerer 07.01.2009 21:46

Координаты после stopDrag()
 
Есть класс, являющийся расширением UILoader.
У которого на MOUSE_DOWN идет this.startDrag(), MOUSE_UP - this.stopDrag()

Почему после того как прошла операция stopDrag() координаты this.x и this.y не изменяются и при проверке они равны тем, которые объект получил в момент создания.

Собственно как эту координату получить? Есть какой-то способ или нужно сочинять формулу выщитывающую положение регистратора объекта относительно его ротейшена и положения мышки? *_*

enepx 07.01.2009 22:06

Цитата:

Сообщение от MadSorcerer (Сообщение 788758)
Есть какой-то способ или нужно сочинять формулу выщитывающую положение регистратора объекта относительно его ротейшена и положения мышки? *_*

Вот это загнули :D

После startDrag() при движении мышки начинают меняться свойства x и y, у того объекта, к которому был применен startDrag().

Сам так делал, но не для UILoader, не думаю, что там по-другому. Он же наследуется от Sprite.

MadSorcerer 07.01.2009 22:23

Код AS3:

public class dragDropWG extends UILoader
        {
                public function dragDropWG()
                {
                        this.addEventListener(MouseEvent.MOUSE_DOWN,down);
                        this.addEventListener(MouseEvent.MOUSE_UP,up);
                }
                private function down(event:MouseEvent):void
                {
                        if (event.ctrlKey==true && event.shiftKey==true)
                        {
                                this.rotation+=45;
                        }
                        else
                        {
                                if (event.shiftKey==true)
                                {
trace("startDrag: "+this.x);
                                        this.startDrag();
                                }
                        }
                }
                private function up(event:MouseEvent):void
                {
                        if (event.ctrlKey==false && event.shiftKey==true)
                        {
                                this.stopDrag()
                                trace("stopDrag: "+this.x);
                        }
                }
        }

Вот это выводит одно и то же число всегда. Как бы мы объект не таскали *_*
trace("startDrag: "+this.x);
trace("stopDrag: "+this.x);

Добавлено:
При всем при этом, объект не телепортируется на исходную позицию. Че-то ппц печаль какая-то :(

enepx 08.01.2009 10:53

попробуйте убрать все if, ctrlKey и т.д.
будет ли перемещать?
я разбираться в них не стал, может в них и напутали.
что значит телепортироваться на исходную позицию? на первоначальную или на новую?

MadSorcerer 08.01.2009 15:57

Объект переносится там где он оказался после stopDrag() но this.x, this.y не меняется.

Сделал какой-то албанский фикс. Приду домой - покажу *_*

silin 08.01.2009 17:35

думаю такое здесь:
у UILoader/UIComponent нет своего startDrag(), есть только у Sprite, он и работает
но x/y у UIComponent свои приватные, которые Sptite'товский драг не меняет..

а менять их будет UIComponent.move() - его и надо использовать на MOUSE_MOVE вместо драга

enepx 08.01.2009 17:36

попробуйте просто
Код AS3:

private function up(event:MouseEvent):void
{
        this.stopDrag()
        trace("stopDrag: "+this.x);
}

Добавлено через 4 минуты
Цитата:

Сообщение от silin (Сообщение 789003)
думаю такое здесь:
у UILoader/UIComponent нет своего startDrag(), есть только у Sprite, он и работает
но x/y у UIComponent свои приватные, которые Sptite'товский драг не меняет..

Хм.. но UIComponent наследник от Sprite. Неужели в Адобе так хреново замутили с этим UIComponent?

silin 08.01.2009 17:48

>>Хм.. но UIComponent наследник от Sprite
ну да, только вместо x и y ( и width/height тоже) у него перегруженные сеттеры и геттеры

MadSorcerer 08.01.2009 21:46

move конечно меняет координаты и они потом легко получаются через this.x this.y но проблема в том, что если объект повернут, то сложно понять куда нужно мувать его (формулу вчера так и не вывел).

Решил проблему так:
При создании объекта выполняется
Код AS3:

var rp:Point = new Point(x,y);

После стопДраг:
Код AS3:

this.move(this.parent.globalToLocal(this.localToGlobal(rp)).x,this.parent.globalToLocal(this.localToGlobal(rp)).y);
//
//


silin 08.01.2009 22:40

непринципиально, но эта rp как бы и лишняя
parent.globalToLocal(localToGlobal(new Point())); точно так же покажет текущую координату..

насчет куда мувить: можно же ориентироваться по stage.mouseX(mouseY) - запоминать предыдущие координаты мыши и двигать на величину смещения, поворот/масштабирование тогда не мешают ни разу..


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

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