Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Mouse_Over вместо CLICK, помогите разобраться с кодом. (http://www.flasher.ru/forum/showthread.php?t=130029)

dmitry_kiv 16.09.2009 13:52

Mouse_Over вместо CLICK, помогите разобраться с кодом.
 
Здравствуйте!
Делаю схему этажей торгового центра. С помощью программиста добились такого результата:
http://dmitry-design.ru/shema/shema.swf

есть два файла с кодом.

note.as

Код AS3:

 
package{
        import flash.display.*;
        import flash.events.*;
        //
        public class Note extends MovieClip{
                public function Note():void{
                        this.buttonMode=true;
                        this.mouseChildren=false;
                        addEventListener(MouseEvent.CLICK,onClick);
                }
                private function onClick(event:MouseEvent):void{
                        removeEventListener(MouseEvent.CLICK,onClick);
                        if(parent)
                                parent.removeChild(this);
                }
        }
}


и main.as

Код AS3:

 
package{
        import flash.display.*;
        import flash.events.*;
        import flash.net.*;
        //
        public class Main  extends MovieClip{
                private var xmlLoader:URLLoader= new URLLoader;
                private var imgMap:MovieClip=null;
                private var top:Sprite= new Sprite;
                //
                public function Main():void{
                        addChild(top);
                        btn0.buttonMode=true;
                        btn0.addEventListener(MouseEvent.CLICK,onClick0);
                        btn1.buttonMode=true;
                        btn1.addEventListener(MouseEvent.CLICK,onClick1);
                        btn2.buttonMode=true;
                        btn2.addEventListener(MouseEvent.CLICK,onClick2);
                        btn3.buttonMode=true;
                        btn3.addEventListener(MouseEvent.CLICK,onClick3);
                        btn4.buttonMode=true;
                        btn4.addEventListener(MouseEvent.CLICK,onClick4);
                        btn5.buttonMode=true;
                        btn5.addEventListener(MouseEvent.CLICK,onClick5);
                        xmlLoader.addEventListener(Event.COMPLETE,onXmlComplete);
                        xmlLoader.addEventListener(IOErrorEvent.IO_ERROR,onXmlIOError);
                        btn0.dispatchEvent(new MouseEvent(MouseEvent.CLICK));
                }
                private function onClick0(event:MouseEvent):void{
                        show('0.xml',Map0);
                }
                private function onClick1(event:MouseEvent):void{
                        show('1.xml',Map1);
                }
                private function onClick2(event:MouseEvent):void{
                        show('2.xml',Map2);
                }
                private function onClick3(event:MouseEvent):void{
                        show('3.xml',Map3);
                }
                private function onClick4(event:MouseEvent):void{
                        show('4.xml',Map4);
                }
                private function onClick5(event:MouseEvent):void{
                        show('5.xml',Map5);
                }
                private function show(fileName:String,map:Class):void{
                        xmlLoader.load(new URLRequest(fileName));
                        if(imgMap && imgMap.parent)
                                removeChild(imgMap);
                        imgMap=null;
                        var mc:MovieClip= new map;
                        addChildAt(mc,0);
                        imgMap=mc;
                }
                private function onXmlComplete(event:Event):void{
                        var xml:XML= XML(event.target.data);
                        while(top.numChildren>0)
                                top.removeChildAt(0);
                        for each(var point:XML in xml.point){
                                var s:Spot= new Spot(point);
                                s.x=point.@x;
                                s.y=point.@y;
                                top.addChild(s);
                                s.addEventListener(MouseEvent.CLICK,onSpotClick);
                        }
                }
                private function onXmlIOError(event:IOErrorEvent):void{
                        trace(event.text);
                }
                private function onSpotClick(event:MouseEvent):void{
                        var spot:Spot= event.target as Spot;
                        var note:Note= new Note;
 
                        note.tf.text=spot.item.note;
                        note.x=Math.round((stage.stageWidth-note.width)/2);
                        note.y=Math.round((stage.stageHeight-note.height)/2);
                        addChild(note);
                }
        }
}
import flash.display.*;
 
class Spot extends Sprite{
        public var item:XML;
        public function Spot(item:XML):void{
                this.item=item;
                this.graphics.beginFill(0xff0000,0.0);
                this.graphics.drawRect(0,0,item.@width,item.@height);
                this.graphics.endFill();
                this..buttonMode=true;
        }
}


Я хочу стобы клип note появлялся при Mouse_Over и исчезал соответственно. Плюс хотел чтоб книп появлялся в месте наведения мыши.

Пробовал вставить значения Mouse._x и Mouse._y но не работает.

Подскажите где править код, в as3 не силен.

Спасибо.

Felicast 16.09.2009 14:17

евенты:
ROLL_OVER - при наведении
ROLL_OUT - при "отведении"
координаты:
event.stageX
event.stageY

dmitry_kiv 16.09.2009 15:31

Felicast спасибо.
Я изменил код:

Функция в файле main.as
Код AS3:

 
private function onXmlComplete(event:Event):void{
                        var xml:XML= XML(event.target.data);
                        while(top.numChildren>0)
                                top.removeChildAt(0);
                        for each(var point:XML in xml.point){
                                var s:Spot= new Spot(point);
                                s.x=point.@x;
                                s.y=point.@y;
                                top.addChild(s);
                                s.addEventListener(MouseEvent.ROLL_OVER,onSpotClick);
                        }
                }

Файл note.as

Код AS3:

 
package{
        import flash.display.*;
        import flash.events.*;
        //
        public class Note extends MovieClip{
                public function Note():void{
                        this.buttonMode=true;
                        this.mouseChildren=false;
                        addEventListener(MouseEvent.ROLL_OUT,onClick);
                }
                private function onClick(event:MouseEvent):void{
                        removeEventListener(MouseEvent.CLICK,onClick);
                        if(parent)
                                parent.removeChild(this);
                }
        }
}

Все работает соответственно коду, но, сейчас клип note исчезает только при условии если курсор мыши был "отведен" с него. Хотелось бы чтоб он исчезал при отведении мыши с активной области.
вот сейчас как работает - http://dmitry-design.ru/shema/shema.swf

Подскажите что исправить?.. никак не могу сам понять.

willis83 16.09.2009 17:26

Ивенты должны быть прикручены к активным областям. Когда наводите на них мышью, создаётся экземпляр класса note с нужным текстом и тут же этот экземпляр добавляется в display object. Как только вы отводите мышку срабатывает Rollout и экземпляр ноут просто стирается, с вынисением из display object

dmitry_kiv 16.09.2009 17:41

willis83 вот в этом и вопрос. как прикрутить ивент Roll_OUT к активной области а не к мувику note?

willis83 16.09.2009 17:50

точно также как к ноуту. или у вас это рисованные кнопки??

dmitry_kiv 16.09.2009 19:04

willis83 нет, кнопки не рисованные. По каждому этажу есть *.xml файл с координатами активных зон. Из этих файлов карта формируется.
В этом сложность, пытался сделать по аналогии с участком кода где Roll_Over описывается, так не получается. Где то ошибку делаю..


Тема все еще актуальна. Подскажите пожалуйста.


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

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