Skip to main content
Known Participant
June 14, 2011
Question

problem with simple unload function

  • June 14, 2011
  • 1 reply
  • 861 views

I have a little problem I need to to go from one keyframe with a gallery, I need that gallery to unload and go to another keyframe called "contact"

but when I do it always comes with

TypeError: Error #1009: Cannot access a property or method of a null object reference.

at gallery_rabbit_picture_fla:MainTimeline/addImage/gallery_rabbit_picture_fla:comImage()[gallery_rabbit_picture_fla.MainTimeline::frame1:73]

at flash.events::EventDispatcher/dispatchEventFunction()

at flash.events::EventDispatcher/dispatchEvent()

at fl.containers::UILoader/passEvent()

at fl.containers::UILoader/handleComplete()

in the 1st. gallery keyframe i have the following it's the button called: contact03_btn that needs to execute the function (see highlight)

var galWid:uint=879.95;

var galHei:uint=300;

var galX:Number=10;

var galY:Number=175;

var scale:Number=1.7;

var speed:Number=0.5;

var scrollX:uint=20;

var alignLeft:Boolean=false;

// Disse bliver kun brugt hvis alignLeft er 'true'

// Dete skal angives i ønskede koordinater.

var offsetX:Number = 40;

var offsetY:Number = 160;

import com.greensock.TweenLite;

import com.greensock.OverwriteManager;

import com.greensock.plugins.*;

TweenPlugin.activate([TransformAroundCenterPlugin,AutoAlphaPlugin]);

var loader:URLLoader = new URLLoader();

var images:XML;

var imageArray:Array = new Array();

var imgNum:uint=0;

var imgLen:uint;

var imgX:uint=0;

var curImg:uint;

var exposed:Boolean=false;

OverwriteManager.init(2);

click_MC2.visible=false;

click_MC.visible=true;

contact03_btn.visible=true;

prevBtn.visible=false;

nextBtn.visible=false;

nextBtn.addEventListener(MouseEvent.CLICK, nextImg);

prevBtn.addEventListener(MouseEvent.CLICK, prevImg);

gallery.addEventListener(MouseEvent.MOUSE_MOVE,scrollImage);

gallery.addEventListener(MouseEvent.MOUSE_OUT, offImage);

loader.addEventListener(Event.COMPLETE, setup);

loader.load(new URLRequest("xml/rabit.xml"));

function setup(e:Event):void {

     images=new XML(e.target.data);

     imgLen=images.image.length();

     galMask.width = galWid;

     galMask.height = stage.stageHeight;

     galMask.x = galX;

     galMask.y = stage.stageHeight*0.5;

     gallery.x = galX;

     gallery.y = galY;

     addImage();

}

function addImage():void {

     var img:imgCon = new imgCon();

     imageArray.push(img);

     img.con.source=images.image[imgNum].src;

     img.con.addEventListener(Event.COMPLETE,comImage);

     img.addEventListener(MouseEvent.CLICK,expImage);

     img.addEventListener(MouseEvent.MOUSE_OVER, onImage);

     function comImage(e:Event):void {

          TweenLite.from(img,0.5,{alpha:0});

          img.con.height=galHei;

          e.target.content.smoothing=true;

          img.con.width=(img.width/img.height)*img.con.height;

          img.x=imgX;

          img.num=imgNum;

          img.des1=images.image[imgNum].des1;

          img.des2=images.image[imgNum].des2;

          imgX+=img.con.width;

          gallery.addChild(img);

          imgNum++;

          if (imgNum<imgLen) {

               addImage();

          }

     }

}

function scrollImage(Event):void {

     if (gallery.width>galWid) {

          var procent:Number = ((mouseX-galX)/galWid);

          if (procent<0.1) {

               procent=0;

          }

          if (procent>0.9) {

               procent=1;

          }

          TweenLite.to(gallery, scrollX, {x:galX-(gallery.width-galWid)*procent, y:galY});

          TweenLite.to(gallery, scrollX, {x:galX-(gallery.width-galWid)*procent, y:galY});

     } else {

          TweenLite.to(gallery,speed,{y:galY, x:galX});

     }

}

function onImage(e:MouseEvent):void {

     desTxtSmall.htmlText=e.currentTarget.des1;

}

function offImage(e:MouseEvent):void{

     desTxtSmall.htmlText='';

}

function expImage(e:MouseEvent):void {

     curImg=e.currentTarget.num;

     

     gallery.setChildIndex(imageArray[curImg], gallery.numChildren - 1);

     

     imageArray[curImg];

     if (! exposed) {

          for (var i=0; i<gallery.numChildren; i++) {

               TweenLite.to(gallery.getChildAt(i),speed,{autoAlpha:0});

          }

          exposed=true;

          toggleBtns();

          gallery.removeEventListener(MouseEvent.MOUSE_MOVE, scrollImage);

          e.currentTarget.removeEventListener(MouseEvent.MOUSE_OUT, hideDes);

          e.currentTarget.removeEventListener(MouseEvent.MOUSE_OVER, showDes);

          e.currentTarget.removeEventListener(MouseEvent.CLICK, expImage);

          e.currentTarget.addEventListener(MouseEvent.CLICK, minImage);

          desTxt.visible=true;

          desTxtSmall.visible=false;

          desTxt.htmlText=e.currentTarget.des2;

          if (alignLeft) {

               TweenLite.to(galMask,0.5,{x:offsetX,width:stage.stageWidth});

               TweenLite.to(gallery, speed,{x:-e.currentTarget.x+offsetX+((e.currentTarget.width*scale-e.currentTarget.width)*0.5)});

               TweenLite.to(e.currentTarget,speed,{autoAlpha:1, transformAroundCenter:{scaleX:scale, scaleY:scale}, y:-galY+offsetY});

          } else {

               TweenLite.to(galMask,0.5,{x:galX+galWid*0.5-(e.currentTarget.width*0.5*scale),width:stage.stageWidth});

               TweenLite.to(gallery, speed,{x:-e.currentTarget.x-e.currentTarget.width*0.5+(galWid*0.5)+galX});

               TweenLite.to(e.currentTarget,speed,{autoAlpha:1, transformAroundCenter:{scaleX:scale, scaleY:scale}});

          }

     }

}

function minImage(e:Event):void {

     exposed=false;

     click_MC2.visible=false;

     click_MC.visible=true;

     contact03_btn.visible=true;

     prevBtn.visible=false;

     nextBtn.visible=false;

     TweenLite.to(galMask,0.5,{x:galX, width:galWid});

     for (var i=0; i<gallery.numChildren; i++) {

          TweenLite.to(gallery.getChildAt(i),speed,{autoAlpha:1});

     }

     e.currentTarget.removeEventListener(MouseEvent.CLICK, minImage);

     e.currentTarget.addEventListener(MouseEvent.CLICK, expImage);

     gallery.addEventListener(MouseEvent.MOUSE_MOVE, scrollImage);

     desTxt.visible=false;

     desTxtSmall.visible=true;

     //TweenLite.to(desTxt,speed,{x:txtMinX, y:txtMinY});

     TweenLite.to(e.currentTarget,speed,{transformAroundCenter:{scaleX:1, scaleY:1},y:0});

     TweenLite.to(gallery,speed,{y:galY});

     //TweenLite.to(galMas,speed,{height:galHei*scale, width:galWid, y:galY, x:galX});

     scrollImage(null);

}

function showDes(e:Event):void {

     if (! exposed) {

          desTxt.visible=true;

          desTxt.htmlText=e.target.des1;

     }

}

function hideDes(e:Event):void {

     if (! exposed) {

          desTxt.visible=false;

     }

}

function nextImg(Event) {

     if (curImg<imgLen-1) {

          imageArray[curImg].addEventListener(MouseEvent.CLICK, expImage);

          imageArray[curImg].removeEventListener(MouseEvent.CLICK, minImage);

          TweenLite.to(imageArray[curImg],0.5,{transformAroundCenter:{scaleX:1, scaleY:1},autoAlpha:0, y:0});

          var nextImg=imageArray[++curImg];

          gallery.setChildIndex(nextImg, gallery.numChildren - 1);

          nextImg.removeEventListener(MouseEvent.CLICK, expImage);

          nextImg.addEventListener(MouseEvent.CLICK, minImage);

          desTxt.htmlText=nextImg.des2;

          if (alignLeft) {

               TweenLite.to(gallery, speed,{x:-nextImg.x+offsetX+((nextImg.width*scale-nextImg.width)*0.5)});

               TweenLite.to(nextImg,speed,{autoAlpha:1, transformAroundCenter:{scaleX:scale, scaleY:scale}, y:-galY+offsetY});

          } else {

               TweenLite.to(gallery, speed,{x:-nextImg.x-nextImg.width*0.5+(galWid*0.5)+galX});

               TweenLite.to(nextImg,speed,{autoAlpha:1, transformAroundCenter:{scaleX:scale, scaleY:scale}});

          }

          toggleBtns();

     }

}

function prevImg(Event) {

     if (curImg>0) {

          imageArray[curImg].addEventListener(MouseEvent.CLICK, expImage);

          imageArray[curImg].removeEventListener(MouseEvent.CLICK, minImage);

          TweenLite.to(imageArray[curImg],0.5,{transformAroundCenter:{scaleX:1, scaleY:1},autoAlpha:0,y:0});

          var prevImg=imageArray[--curImg];

          gallery.setChildIndex(prevImg, gallery.numChildren - 1);

          prevImg.removeEventListener(MouseEvent.CLICK, expImage);

          prevImg.addEventListener(MouseEvent.CLICK, minImage);

          desTxt.htmlText=prevImg.des2;

          if (alignLeft) {

               TweenLite.to(gallery, speed,{x:-prevImg.x+offsetX+((prevImg.width*scale-prevImg.width)*0.5)});

               TweenLite.to(prevImg,speed,{autoAlpha:1, transformAroundCenter:{scaleX:scale, scaleY:scale}, y:-galY+offsetY});

          } else {

               TweenLite.to(gallery, speed,{x:-prevImg.x-prevImg.width*0.5+(galWid*0.5)+galX});

               TweenLite.to(prevImg,speed,{autoAlpha:1, transformAroundCenter:{scaleX:scale, scaleY:scale}});

          }

          toggleBtns();

     }

}

function toggleBtns():void {

     if (curImg>0) {

          prevBtn.visible=true;

     } else {

          prevBtn.visible=false;

     }

     if (curImg<imgLen-1) {

          nextBtn.visible=true;

     } else {

          nextBtn.visible=false;

     }

     click_MC.visible=false;

     contact03_btn.visible=false;

     click_MC2.visible=true;

}

back03_btn.addEventListener(MouseEvent.CLICK,back_rabit)

function back_rabit(event:MouseEvent):void

{

     

   ExternalInterface.call("Shadowbox.close");

     

}


stage.addEventListener(MouseEvent.CLICK, goTo_contact);

function goTo_contact(event:MouseEvent):void{

    if (event.target.name!=null){

       

        switch(event.target.name) {


               case "contact03_btn":

            gotoAndStop("contact");

               //gallery.unload()

               //removeChild(gallery);


               break;

          

            default:

            trace("goto contact");


        }

    }

}

stop();

This topic has been closed for replies.

1 reply

relaxatraja
Inspiring
June 14, 2011

Use trace within your bold area to know the targeted name first

stage.addEventListener(MouseEvent.CLICK, goTo_contact);

function goTo_contact(event:MouseEvent):void{

trace("event.target.name:"+event.target.name);

    if (event.target.name!=null){

       

        switch(event.target.name) {


               case "contact03_btn":

            gotoAndStop("contact");

           &nbs p;   //gallery.unload()

           &nbs p;   //removeChild(gallery);


           &nbs p;   break;

          

            default:

            trace("goto contact");


        }

    }

}

if return null then use event.currentTarget.name. and also give a try by change the order

gallery.unloadAndStop()

removeChild(gallery);

gotoAndStop("contact");

Also would like to know, whether you getting error on this event?

stage.addEventListener(MouseEvent.CLICK, goTo_contact);

kimtragerAuthor
Known Participant
June 14, 2011

The first solution sort of worked but when I clicked back and forward a few times it came up with the following error

event.target.name:contact03_btn

event.target.name:contact_back_btn

goto contact

event.target.name:contact03_btn

close down contact

event.target.name:contact_back_btn

goto contact

event.target.name:contact03_btn

close down contact

event.target.name:contact_back_btn

goto contact

event.target.name:contact03_btn

close down contact

TypeError: Error #1009: Cannot access a property or method of a null object reference.

     at gallery_rabbit_picture_fla:MainTimeline/addImage/gallery_rabbit_picture_fla:comImage()[gallery_rabbit_picture_fla.MainTimeline::frame1:73]

     at flash.events::EventDispatcher/dispatchEventFunction()

     at flash.events::EventDispatcher/dispatchEvent()

     at fl.containers::UILoader/passEvent()

     at fl.containers::UILoader/handleComplete()

relaxatraja
Inspiring
June 14, 2011

For this kind of approach, why not you directly assign the listener to the buttons instead of stage, that is the practice one too.

instead of stage use your button name:

Sample:

contact03_btn.addEventListener(MouseEvent.CLICK,contact03fn);

contact_back_btn..addEventListener(MouseEvent.CLICK,contactbackfn);

function contact03fn(e:MouseEvent):void{

     //Your code

}

function contactbackfn(e:MouseEvent):void{

     //Your code

}

Change your code this way

Also check whether any listeners are working while you were click buttons?