Welcome, Guest
  • Author Topic: mouse event on Bitmap - clone / problem  (Read 2364 times)

    till

    • Seasoned Programmer
    • ***
    • Posts: 200
      • View Profile
      • Email
    mouse event on Bitmap - clone / problem
    « on: 08/24/09, 15:45 »
    hi!

    i am trying to get familiar with as3.....
    hard stuff........


    my eventListener on clones doesnt work. neither trace() nor tweens.......

    eventListener on my_image  do work.

    whats wrong?
    please help.
    thanks.
    till.

    Code: [Select]
    loading stuff here......




    function nextImage(pos):void {
       
    var my_image:Loader=Loader(my_loaders_array[my_playback_counter]);
    Bitmap(my_image.content).smoothing = true;

    my_image_slides.addChild(my_image);
    my_image.scaleX = .1;
    my_image.scaleY = .1;

    my_image.addEventListener(MouseEvent.CLICK, mouse_click);
            my_image.addEventListener(MouseEvent.MOUSE_OVER, mouse_over);
    my_image.addEventListener(MouseEvent.MOUSE_OUT, mouse_out);

    //trace(my_image.parent.name+"_"+my_image.parent.numChildren);


    if(pos == false){
    my_image.x = -400
    my_image.y = 120
    my_tweens_array[0]=new Tween(my_image,"alpha",Strong.easeOut,0,1,1,true);
    }else{

    var my_prev_image:Loader=Loader(my_image_slides.getChildAt(my_playback_counter-1));
    var my_prev_x = my_prev_image.x
    var my_prev_width = my_prev_image.width

    my_image.x = my_prev_x + my_prev_width;//0//(stage.stageWidth - my_image.width)/2;
            my_image.y = 120//(stage.stageHeight - my_image.height)/2;
    my_tweens_array[0]=new Tween(my_image,"alpha",Strong.easeOut,0,1,1,true);


    }

    //******************* C L O N E *****************************************************

    copyed = new Bitmap(Bitmap(my_image.content).bitmapData.clone());
              my_image_slides2.addChild(copyed);

    //trace("copyed_"+copyed.parent.numChildren);
    copyed.scaleX = 0.1;
    copyed.scaleY = 0.1;
    copyed.x = my_image.x


    copyed.addEventListener(MouseEvent.CLICK, mouse_click);                        //  !!!!!!!!!!!!!!!!!!!!!!!!!!!
    copyed.addEventListener(MouseEvent.MOUSE_OVER, mouse_over);           //  !!!!!!!!!!!!!!!!!!!!!!!!!!!

    //***********************************************************************************


    function mouse_click(e:MouseEvent):void {

    trace(e.target)
    //trace(parent.numChildren);
    var active_image = e.target;

    for(var i=0; i < active_image.parent.numChildren-1; i++)
                   {
                             var mc:Loader = active_image.parent.getChildAt(i);
                            //mc.doStuff();
                    //trace(mc);
                    //trace(i);
                    //mc.rotation += 5;
                    }
    active_image.parent.setChildIndex(active_image, active_image.parent.numChildren-1);

    var tweenX:Tween = new Tween(e.target, "scaleX", Regular.easeOut, .1, .5, 0.5, true);
    var tweenY:Tween = new Tween(e.target, "scaleY", Regular.easeOut, .1, .5, 0.5, true);

    }





       

    Jorge Solis

    • Global Moderator
    • Systems Administrator
    • *****
    • Posts: 14616
      • View Profile
    Re: mouse event on Bitmap - clone / problem
    « Reply #1 on: 08/24/09, 17:54 »
    Be sure my_image_slides2 (the container) doesn't have some MouseEvent assigned and that copies are clearly visible since you're scaling down and possitioning ...

    Jorge

    till

    • Seasoned Programmer
    • ***
    • Posts: 200
      • View Profile
      • Email
    Re: mouse event on Bitmap - clone / problem
    « Reply #2 on: 08/25/09, 05:20 »
    hi jorge!

    thanks for replying.

    after thinking this over i decide to start all over from the beginning.

    my target is to rebuild a script that is written in as2 and for that it doesnt meet the condition to be loaded into
    a as3 file.  (see my previous topic : http://www.flash-db.com/Board/index.php?topic=19482.0 )

    ( my working example in as2:
    http://www.till.co.at/CMS/flash_content/flash/test_loading.html )

    as in my as2 example there are two mc's (slider1 and slider2) holding the exact same count of images.
    ...and those two mc's do the endless panorama effect......   (thats quite easy in as2).


    my theoretical question:

    if i do it in as3 would it be best practice to write the script for one slider and then call it like:  ( instead of cloning the images )

    (in main fla):

    var slide_holder1:slider = new slider();

    var slide_holder2:slider = new slider();

    ....... and do the panorama - stuff in main fla.


    do the images then load twice and loading time is double ? ( is it a silly question ? )

    if yes, what else is the best way to go on ?


    thanks.
    till.




    Jorge Solis

    • Global Moderator
    • Systems Administrator
    • *****
    • Posts: 14616
      • View Profile
    Re: mouse event on Bitmap - clone / problem
    « Reply #3 on: 08/25/09, 14:07 »
    Following just a formal point of view, there's no need of two instances side by side, just one movieng his elements once thsy surpass certain limit

    Jorge

    till

    • Seasoned Programmer
    • ***
    • Posts: 200
      • View Profile
      • Email
    Re: mouse event on Bitmap - clone / problem
    « Reply #4 on: 08/30/09, 14:38 »
    hi jorge !


    after five days and nights with o'oreilly essential action script 3.0 and a lot of tutorials i
    got stuck with "moving his elements once they surpass certain limit" from your last reply.

    i cant figure out how i can get rid of an image, once it passed a limit and put it back to the end of "holder".

    i guess i have to care about the index of a "moved" image when adding it to the other end.
    (all image - indexes of "holder" have to be updated)?

    please give me a hint to face this function. (private function update_position(e:Event):void)

    this is what i have insofar :

    http://till.co.at/slide_show_III/my_as3_slider.html


    thanks for helping.
    till.

    Code: [Select]
    package
    {
    import flash.net.*;
    import flash.utils.Timer;
    import flash.display.*;
    import flash.text.*;
    import fl.transitions.easing.*;
    import flash.events.*;
    //import flash.events.MouseEvent;
    //import flash.text.TextFormat;
        //import flash.text.TextFormatAlign;
    import container;
    import gs.TweenLite;
    import com.pixelfumes.reflect.*;


    public class getSlider extends Sprite
    {
    private var start_scale:Number = .4;
    private var clicked_scale:Number = .6;
    private var clicked_y_pos:Number = -10;

    public var my_clicked_pos:Number;
    public var gesamt_weite:Number;
    //private var speed:Number = 0;
    private var centerX:Number;
    private var my_speed:Number;
    private var maxSpeed:uint = 20;
    private var my_total:Number;
    private var my_images:XMLList;

    private var my_loaders_array:Array = [];
    private var my_labels_array:Array = [];
    private var my_success_counter:Number = 0;
    private var my_playback_counter:Number = 0;
    //Sprite = new Sprite();
    private var holder:MovieClip = new MovieClip();
    private var my_slideshow:MovieClip = new MovieClip();
    private var my_image_slides:MovieClip = new MovieClip();
    private var my_label_slides:MovieClip = new MovieClip();

    private var my_preloader:TextField;
    private var newFormat:TextFormat = new TextFormat();
    private var my_timer:Timer;
    container.vars.total_weite = 0;
    private var my_xml_loader:URLLoader = new URLLoader();
    StageQuality.BEST;


    public function getSlider()
    {

    addChild(holder);
    //my_xml_loader.load(new URLRequest("http://localhost/source/slide_show_III/backend.php"));
    my_xml_loader.load(new URLRequest("backend.php"));
    my_xml_loader.addEventListener(Event.COMPLETE, processXML);
    }


    public function processXML(e:Event):void
    {
    var my_xml:XML = new XML(e.target.data);
    my_speed = my_xml. @ SPEED;
    my_images = my_xml.IMAGE;
    my_total = my_images.length();

    loadImages();

    my_xml_loader.removeEventListener(Event.COMPLETE, processXML);
    my_xml_loader = null;
    }


    public function loadImages():void
    {

    for (var i:Number = 0; i < my_total; i++)
    {
    var my_url:String = my_images[i]. @ URL;
    var my_loader:Loader = new Loader();
    my_loader.load(new URLRequest(my_url));
    my_loader.contentLoaderInfo.addEventListener(Event.COMPLETE, onComplete);
    //my_loader.contentLoaderInfo.addEventListener(Event.INIT, initHandler);
    my_loaders_array.push(my_loader);

    var my_label:Object = new Object();
    my_label.text = my_images[i]. @ TITLE;
    //my_label.autoSize = TextFieldAutoSize.LEFT;
    my_labels_array.push(my_label);


    }

    my_preloader = new TextField();
    my_preloader.autoSize = TextFieldAutoSize.CENTER;
    newFormat.size = 10;
                newFormat.color = 0xcccccc;
    newFormat.font="Arial";
    my_preloader.defaultTextFormat = newFormat;
    my_preloader.text = "Loading......";
    my_preloader.x = (stage.stageWidth - my_preloader.width)/2;
    my_preloader.y = -36; // (stage.stageHeight - my_preloader.height)/2;
    addChild(my_preloader);
            }


    public function onComplete(e:Event):void
    {
    my_success_counter++;

    if (my_success_counter == my_total)
    {
                   startShow();
                }

    var my_loaderInfo:LoaderInfo = LoaderInfo(e.target);
    my_loaderInfo.removeEventListener(Event.COMPLETE, onComplete);

    }


    public function startShow():void
    {


    my_preloader.text = "";

                addChild(my_slideshow);
    my_slideshow.addChild(my_image_slides);

    holder.addChild(my_slideshow);

    nextImage(false);

    my_timer = new Timer(my_speed * 10);
    my_timer.addEventListener(TimerEvent.TIMER, timerListener);
    my_timer.start();

    }


    public function nextImage(pos):void
    {
    var reflect_image:MovieClip = new MovieClip();

    var my_image:Loader = Loader(my_loaders_array[my_playback_counter]);


    var reflect = new Bitmap(Bitmap(my_image.content).bitmapData.clone());

    reflect_image.addChild(reflect);
    Bitmap(reflect).smoothing = true;

    var r1 = new Reflect({mc:reflect_image,alpha:40,ratio:200,distance:16,updateTime:-1,reflectionDropoff:0});
    my_image_slides.addChild(reflect_image);
    reflect_image.scaleX = start_scale;
    reflect_image.scaleY = start_scale;
                //reflect_image.doubleClickEnabled = true;
    //reflect_image.addEventListener(MouseEvent.DOUBLE_CLICK, doubleClickHandler);
    reflect_image.addEventListener(MouseEvent.CLICK, mouse_click);
    reflect_image.addEventListener(MouseEvent.MOUSE_OVER, mouse_over);
    reflect_image.addEventListener(Event.ENTER_FRAME,update_position);
    reflect_image.addEventListener(MouseEvent.MOUSE_MOVE, mouse_over);

    if (pos == false)
    {
    reflect_image.x = 0;
    } else
    {

    var my_prev_image = (my_image_slides.getChildAt(my_playback_counter - 1));
    var my_prev_x = my_prev_image.x;
    var my_prev_width = my_prev_image.width;
    reflect_image.x = my_prev_x + my_prev_width;

    }

    }


    private function timerListener(e:TimerEvent):void
    {

    my_playback_counter++;
    if (my_playback_counter == my_total)
    {
    my_playback_counter = my_total;
    my_timer.stop();
    my_timer.removeEventListener(TimerEvent.TIMER, timerListener);
    holder.addEventListener(Event.ENTER_FRAME,run);
    container.vars.total_weite = holder.width;


    } else
    {
    nextImage(true);
    }
    }
    private function doubleClickHandler(event:MouseEvent) :void
    {
    trace("doubleClickHandler: "+event);
        }

    private function mouse_over(e:MouseEvent):void
    {

    this.mouseEnabled = true;
    this.buttonMode = true;
    holder.removeEventListener(Event.ENTER_FRAME,run);
    for (var u:uint = 0; u < my_total; u++)
    {

    }
    }


    public function mouse_click(e:MouseEvent):void
    {
    holder.removeEventListener(Event.ENTER_FRAME,run);
    //trace(my_labels_array[e.target.parent.getChildIndex(e.target)].text)
                my_preloader.text =  my_labels_array[e.target.parent.getChildIndex(e.target)].text;
    container.vars.active_image = e.currentTarget;

    if (container.vars.active_image != "")
    {

    var my_target = container.vars.active_image;
    //trace("NumChildren = "+(my_target.parent.numChildren-1));
    var my_num_children = my_target.parent.numChildren - 1;
    //trace("my_cklicked_name = "+my_target.name);
    //trace("my_cklicked_index = "+my_target.parent.getChildIndex(e.currentTarget));
    var my_cklicked_index = my_target.parent.getChildIndex(e.currentTarget) + 1;
    //trace("my_clicked_weite =  "+my_target.width);
    var my_clicked_weite = my_target.width;
    //trace("my_clicked_pos =  "+my_target.x);
    my_clicked_pos = my_target.x;
    }
    TweenLite.to(e.currentTarget, .4, { y:clicked_y_pos,scaleX:clicked_scale, scaleY:clicked_scale, onComplete:del_enter_frame , onCompleteParams:[my_num_children]});

    for (var i:uint = 0; i < e.currentTarget.parent.numChildren; i++)
    {
    e.currentTarget.parent.getChildAt(i).addEventListener(Event.ENTER_FRAME,organize);
    }

    if (container.vars.groupingID != "")
    {
    TweenLite.to(container.vars.groupingID, .4, {y:0,scaleX:start_scale, scaleY:start_scale});
    }

    container.vars.groupingID = e.currentTarget;
    }


    private function del_enter_frame(my_num_children):void
    {
    for (var a:uint = 0; a < my_num_children+1; a++)
    {
    container.vars.active_image.parent.getChildAt(a).removeEventListener(Event.ENTER_FRAME,organize);

    }
    }


    private function organize(e:Event):void
    {
    var my_center = stage.stageWidth / 2;
    //trace("my_enter_frame_clicked_pos =  "+my_clicked_pos);
    var center_me =  my_center - container.vars.active_image.x - (container.vars.active_image.width)  + (container.vars.active_image.width / 2);
    //trace("slide_show_weite = " + my_slideshow.width);

    //trace(this.getChildAt(0).name);
    TweenLite.to(holder, .4, {x:center_me});

    for (var i:uint = 1; i < e.currentTarget.parent.numChildren; i++)
    {
    //trace ('\t|\t ' +i+'.\t name:' + e.currentTarget.parent.getChildAt(i).name + '\t type:' + typeof (e.currentTarget.parent.getChildAt(i))+ '\t' + e.currentTarget.parent.getChildAt(i));
    // e.currentTarget.parent.getChildAt(i).removeEventListener(MouseEvent.CLICK, mouse_click);
    e.currentTarget.parent.getChildAt(i).x = e.currentTarget.parent.getChildAt(i - 1).x + e.currentTarget.parent.getChildAt(i - 1).width;
    }

    }


    private function run(e:Event):void
    {

    var midPt:uint = stage.stageWidth / 2;
    var diff:int = mouseX - midPt;
    var perc:Number = diff / midPt;
    e.target.x -= perc * maxSpeed;
    }


    private function update_position(e:Event):void
    {
    //trace("e.target.x = "+e.target.x+" und  HOLDER.x = "+holder.x )
    //trace(holder.width)
    //wenn zu weit links ( -300 )
    if (holder.x + e.currentTarget.x  < 100 &&  mouseX >  stage.stageWidth/2)
    {
    //e.target.x = holder.width + holder.x

    }




    }

    }
    }