Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Перетаскивание ролика с помощю startDrag() (http://www.flasher.ru/forum/showthread.php?t=115525)

Visual 01.09.2008 23:59

Перетаскивание ролика с помощю startDrag()
 
Вложений: 1
Опять возникла проблемка. И чуствую что решение очень простое, но уже по форуму искал и на гугле но так и не пойму как при помощи startDrag передгивать клип.
На основном таймлайне розмещен ролик window (он експортнут для ActionSript и создан клас Window) внутри этого ролика само окно и еще 1 клип window_title, заголовок окна. Вот я хочу перетаскивать window когда мишка зажата над заголовком window_title.

Код:

package main{

        import flash.display.MovieClip;
        import flash.events.*;
        import flash.display.Sprite;

        public class window extends Sprite {

                public function window() {

                        window_title.addEventListener(MouseEvent.MOUSE_DOWN, handleMouseDown);
                        window_title.addEventListener(MouseEvent.MOUSE_UP, handleMouseUp);
                        window_title.addEventListener(Event.MOUSE_LEAVE, handleMouseLeave);

                        function handleMouseDown(evt:Event):void {

                                window.startDrag();

                        }

                        function handleMouseUp(evt:Event):void {

                                window.stopDrag();

                        }

                        function handleMouseLeave(event:Event=undefined):void {

                                handleMouseUp(event);
                        }
                }
        }
}

Что делаю не так? :rolleyes:

Alex Lexcuk 02.09.2008 00:11

Код:

package main{

        import flash.display.MovieClip;
        import flash.events.*;
        import flash.display.Sprite;

        public class window extends MovieClip {

                public function window() {

                        window_title.addEventListener(MouseEvent.MOUSE_DOWN, handleMouseDown);
                        window_title.addEventListener(MouseEvent.MOUSE_UP, handleMouseUp);
                        window_title.buttonMode = true;

                        function handleMouseDown(evt:Event):void {

                                startDrag();

                        }

                        function handleMouseUp(evt:Event):void {

                                stopDrag();

                        }
                }
        }
}


Visual 02.09.2008 00:17

:drinks: Спасибо!

etc 02.09.2008 01:51

Боже мой, кто же вас так классы научил называть? Ведь нигде ни в доках, ни в нормальных книгах такого формата именования классов нет! Откуда вы берете такие кривейшие и совершенно не соответствующие стандартам имена классов? Про методы я уж молчу.

Visual 02.09.2008 15:30

Цитата:

Сообщение от __etc (Сообщение 761748)
Боже мой, кто же вас так классы научил называть? Ведь нигде ни в доках, ни в нормальных книгах такого формата именования классов нет! Откуда вы берете такие кривейшие и совершенно не соответствующие стандартам имена классов? Про методы я уж молчу.

Своя школа :rolleyes: Обещаю исправится. Класс должен быть Window ? а клип windowTitle ? :rolleyes:

etc 03.09.2008 01:10

Цитата:

Сообщение от Visual (Сообщение 761808)
Своя школа :rolleyes: Обещаю исправится. Класс должен быть Window ? а клип windowTitle ? :rolleyes:

Как минимум.
А вложенные функции тоже из вашей собственной школы.

s8000_1 03.09.2008 05:11

Цитата:

Сообщение от __etc (Сообщение 761919)
А вложенные функции тоже из вашей собственной школы.

А что плохого во вложенных функциях? о_О

Код:

addEventListenr(MouseEvent.CLICK, function (e:MouseEvent):void{ trace ("click") });
разве сильно плохо?

ramshteks 03.09.2008 06:04

Цитата:

Сообщение от s8000_1 (Сообщение 761939)
А что плохого во вложенных функциях? о_О

Код:

addEventListenr(MouseEvent.CLICK, function (e:MouseEvent):void{ trace ("click") });
разве сильно плохо?

плохо, анонимные функци ни есть хорошо! СОВСЕМ НЕ ТРУ :umnik2:

etc 03.09.2008 10:48

Цитата:

Сообщение от s8000_1 (Сообщение 761939)
А что плохого во вложенных функциях? о_О

Код:

addEventListenr(MouseEvent.CLICK, function (e:MouseEvent):void{ trace ("click") });
разве сильно плохо?

Уже обсуждалось это. Вы потом не отпишетесь от таких функций, потому что у вас не будет ссылок на них, а значит ваши спрайты и объекты будут висеть в памяти, что плохо сказывается на общей производительности. Вложенные функции можно создавать лишь в том случае, если они только вычисляют некоторое значение на основе пришедших параметров и всё. Да и то, их лучше заменить статическими функциями. Я уже не говорю про возможные проблемы с областями видимости.

Visual 03.09.2008 16:20

Цитата:

Сообщение от __etc (Сообщение 761958)
Уже обсуждалось это. Вы потом не отпишетесь от таких функций, потому что у вас не будет ссылок на них, а значит ваши спрайты и объекты будут висеть в памяти, что плохо сказывается на общей производительности. Вложенные функции можно создавать лишь в том случае, если они только вычисляют некоторое значение на основе пришедших параметров и всё. Да и то, их лучше заменить статическими функциями. Я уже не говорю про возможные проблемы с областями видимости.

Напишите пожалуйста как правильно должен быть этот код, чтоб потом после обнуления класса он без проблем удалился Сборщиком Мусора :

Код:

package main{

        import flash.display.MovieClip;
        import flash.events.*;
        import flash.display.Sprite;

        public class Window extends MovieClip {

                public function window() {

                        wtitle.addEventListener(MouseEvent.MOUSE_DOWN, handleMouseDown);
                        wtitle.addEventListener(MouseEvent.MOUSE_UP, handleMouseUp);
                        wtitle.buttonMode = true;

                        function handleMouseDown(evt:Event):void {

                                startDrag();

                        }

                        function handleMouseUp(evt:Event):void {

                                stopDrag();

                        }
                }
        }
}


etc 03.09.2008 16:24

Вынести функции и сделать их приватными методами класса, для начала. При событие REMOVED_FROM_STAGE отписывайтесь от MOUSE_DOWN и MOUSE_UP.

Код я писать не буду, лень.

ramshteks 03.09.2008 17:21

а есть ли события подобное releаse outside как во втором скрипте, или чтоб не наблюдать картину что ты уже отпустил мышь а картинка за тобой тоскается единственный выход маусап цеплять к мувику на уровень выше по вложенности? на два?

BlooDHounD 03.09.2008 17:23

ramshteks, а может тупо на stage ?

ramshteks 03.09.2008 17:27

можно и на стейдж.
вопрос как лучше, а не как можно)


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

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