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

teion 12.04.2011 11:33

лоадер, который загружает лоадер, котороый загружает лоадер
 
вобщем, такой вопрос.. Есть 3 swf файла, каждый из них загружает предыдущий swf. Иерархия такая:
main_class <- block1 <- messag
в классе messag создается объект box и помещается в контейнер bo
Код AS3:

package  {
 
        import flash.display.MovieClip;
 
 
        public class messag extends MovieClip {
 
                var bo:MovieClip = new box();
                public function messag() {
                        bo.x = 50;
                        bo.y = 50;
                        addChild(bo);
                }
        }
 
}

в классе block1 подгружается messag.swf. Далее в этом классе я пытаюсь реализовать таскание этого загружаемого messag.swf за объект bo
Код AS3:

package  {
 
        import flash.display.MovieClip;
        import flash.display.Loader;
        import flash.net.URLRequest;
        import flash.events.MouseEvent;
        import flash.events.Event;
 
        public class block1 extends MovieClip {
 
                var loader:Loader = new Loader();
                var url:URLRequest = new URLRequest("messag.swf");
                var cont:MovieClip;
                public function block1() {
                        // constructor code
                        loader.load(url);
                        loader.contentLoaderInfo.addEventListener(Event.COMPLETE, initt);
                }
                                public function initt (e:Event) {
                                        addChild(loader);
                        var cont = loader.content;
                        cont as MovieClip;
                        cont.bo.addEventListener(MouseEvent.MOUSE_DOWN,mdown);
                                }
 
 
                public function mdown (e:MouseEvent){
                        addEventListener (MouseEvent.MOUSE_MOVE, mmove);
                        addEventListener (MouseEvent.MOUSE_UP, mup);
                        function mmove (e:MouseEvent) {
                        //cont.x = this.localX;
                        trace(this.stageX);
                        }
                        function mup (e:MouseEvent) {
                        removeEventListener (MouseEvent.MOUSE_MOVE, mmove);
                        removeEventListener (MouseEvent.MOUSE_UP, mup);
                        }
                }
 
        }
 
}

ну и соответственно в классе main_class должен подгружаться block1.swf, в котором весь предыдущий функционал должен работать.
вопрос в том, что мне нужно передать контейнеру cont координаты мышки, но фраза даже trace(this.stageX); выдает undefined
всю голову уже сломал

bav 12.04.2011 12:26

1) Форматируйте код. Читать трудно.

2)
Цитата:

в классе messag создается объект box и помещается в контейнер bo
Код AS3:

public class messag extends MovieClip 
{
    var bo:MovieClip = new box();
    public function messag()
    {
        bo.x = 50;
        bo.y = 50;
        addChild(bo);
    }
}

Неправда. Здесь новый объект box становиться ребенком объекта messag.

3) В функции initt, что вы хотели сказать этой строчкой?
Код AS3:

cont as MovieClip;

Возможно вы хотели сказать:
Код AS3:

// Используем поле класса, а не локальную переменную.
cont = loader.content as MovieClip;

4) Попробуйте дождаться появления stage.

5) Избавьтесь от вложенных функций:
Код AS3:

private function mdown (e:MouseEvent):void{
    (e.target as EventDispatcher).addEventListener(MouseEvent.MOUSE_MOVE, mmove);
    (e.target as EventDispatcher).addEventListener(MouseEvent.MOUSE_UP, mup);                       
}
 
private function mmove (e:MouseEvent):void {
    trace(this.stageX);
}
 
private function mup (e:MouseEvent):void {
    (e.target as EventDispatcher).removeEventListener(MouseEvent.MOUSE_MOVE, mmove);
    (e.target as EventDispatcher).removeEventListener(MouseEvent.MOUSE_UP, mup);
}

6) А может быть:
Код AS3:

private function mmove (e:MouseEvent):void {
    trace(e.stageX);
}

Потому что MouseEvent.stageX. И потому что ни у класса block1, ни у MovieClip'a свойства stageX не наблюдается.

ZZZubec 12.04.2011 12:35

поробуй не this.stageX, а trace( e )
как то всё странно у тебя...
Код AS1/AS2:

function mdown(e:MouseEven)
{
    trace(e); //даст все нужные координаты
//[MouseEvent type="click" bubbles=true cancelable=false eventPhase=3 localX=24 localY=14 stageX=224 stageY=24 relatedObject=null ctrlKey=false altKey=false shiftKey=false buttonDown=false delta=0]
}

Есть ли смысл их передавать, если каждый мувик наверняка имеет и сам доступ к ним.

teion 12.04.2011 12:36

спасибо! До EventDispatcher я еще не дошел, но буду стараться )

bav 12.04.2011 12:41

EventDispatcher это просто класс, в котором определены публичные методы addEventListener и removeEventListener, и наследником которого является MovieClip. e.target можно приводить и к MovieClip, по-моему разницы, в данном контексте, нет (спроси у гуру).

teion 12.04.2011 14:47

Вложений: 1
еще такой вопрос - как определить высоту верхнего края у мувиклипа, если он не отцентрирован в левый верхний угол, вот код на данный момент
Код AS3:

package  {
 
        import flash.display.MovieClip;
        import flash.display.Loader;
        import flash.net.URLRequest;
        import flash.events.MouseEvent;
        import flash.events.Event;
import flash.events.EventDispatcher;
 
        public class block1 extends MovieClip {
 
                var loader:Loader = new Loader();
                var url:URLRequest = new URLRequest("messag.swf");
                var cont:MovieClip; //контейнер для лоадера
                var dispx:Number; //переменные для коррекции места начала сдвига
                var dispy:Number;
                public function block1() {
                        // constructor code
                        loader.load(url);
                        loader.contentLoaderInfo.addEventListener(Event.COMPLETE, initt);
                }
                                public function initt (e:Event) {
                                        loader.y = 100;
                                        addChild(loader);
                        var cont = loader.content as MovieClip;//используем содержимое как мувиклип, что бы добраться до его экземпляров
                        cont.bo.addEventListener(MouseEvent.MOUSE_DOWN,mdown);
                        cont.bo.addEventListener(MouseEvent.ROLL_OUT,mrollout);
 
                                }
 
 
                private function mdown (e:MouseEvent):void{
                        dispx = e.localX;//присваивание коррекции
                        dispy = e.localY;
    (e.target as EventDispatcher).addEventListener(MouseEvent.MOUSE_MOVE, mmove);
    (e.target as EventDispatcher).addEventListener(MouseEvent.MOUSE_UP, mup);                       
                        }
                        function mmove (e:MouseEvent) {
                        loader.x = e.stageX-dispx;//сдвиг по Х работает нормально
                        loader.y = e.stageY-dispy;//сдвиг по У работает не корректно из за того, что cont.bo не отцентрирован по верхнему краю
                        trace(e);
                        }
                        private function mup (e:MouseEvent):void {
    (e.target as EventDispatcher).removeEventListener(MouseEvent.MOUSE_MOVE, mmove);
    (e.target as EventDispatcher).removeEventListener(MouseEvent.MOUSE_UP, mup);
                        }
                        private function mrollout (e:MouseEvent):void {
    (e.target as EventDispatcher).removeEventListener(MouseEvent.MOUSE_MOVE, mmove);
    (e.target as EventDispatcher).removeEventListener(MouseEvent.MOUSE_UP, mup);
                        }
 
        }
 
}



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

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