views:

196

answers:

2

I have a Document class, Intro class and Nav class.

The Intro class runs first, then sends a custom dispatch event to run the Nav class, but I'm getting this error:

removed Intro
ArgumentError: Error #1063: Argument count mismatch on com.secrettowriting.StanPlayer.ui::Navigation/addNav(). Expected 0, got 1.
at flash.events::EventDispatcher/dispatchEventFunction()
at flash.events::EventDispatcher/dispatchEvent()
at com.secrettowriting.StanPlayer.display::Intro/removeIntro()
at flash.utils::Timer/_timerDispatch()
at flash.utils::Timer/tick()

The addNav function in the Navigation class should expect 0 arguments/variables and I'm not sending any arguments/variables to it, which is why I'm confused as to why it's saying I'm getting 1.

(1) This runs, attaches complete listener

private function drawIntro():void
{
    intro = new Intro();
    intro.drawIntro();
    intro.addEventListener("onComplete", nav.addNav);
    stage.addChild(intro);
}

(2) In the Intro class this function will hit and send the dispatch event, but I get that error right after the trace statement.

private function removeIntro(e:TimerEvent):void
    {           
        if (n < 10){
            n++
        } else if (n == 10){
            introRemover.removeEventListener(TimerEvent.TIMER, removeIntro);
            removeChild(introMov);
            trace("removed Intro");

            dispatchEvent (new CustomEvent(CustomEvent.COMPLETE, {})); // → Intro to Navigation
        }
    }

(3) Which is then suppose to trigger this function in Navigation

public function addNav():void
    {
        trace("addNav ----");
        addChild(weAreA);
        addChild(introText);
        addChild(chooseAVideo);

        TweenLite.to(weAreA, 2, {alpha:1});
        TweenLite.to(introText, 3, {alpha:1});
        TweenLite.to(introText, 3, {alpha:1});
    }



Class Code --------------------------------------------------------------

My Document Class:

    public function HomePlayer():void
    {
        if (stage) init();
        else addEventListener(Event.ADDED_TO_STAGE, init);
    }

    private function init(e:Event = null):void 
    {
        removeEventListener(Event.ADDED_TO_STAGE, init);

        stage.scaleMode = StageScaleMode.NO_SCALE;
        stage.align     = StageAlign.TOP_LEFT;

        // Use when Live
            //videoURL = this.loaderInfo.parameters.theVIDEO; // Get the Video URL from HTML

        // Remove when video testing ready
            videoURL = "videos/WhatDifferentiatesUs.flv";

        drawNav();
        drawIntro();
    }

    private function drawIntro():void
    {
        intro = new Intro();
        intro.drawIntro();
        intro.addEventListener("onComplete", nav.addNav);
        stage.addChild(intro);
    }

    private function drawNav():void
    {
        nav = new Navigation();
        nav.drawNav();
        stage.addChild(nav);
    }


Intro Class:

    Public function Intro():void
    {
        if (stage) init();
        else addEventListener(Event.ADDED_TO_STAGE, init);
    }

    private function init(e:Event = null):void {
        removeEventListener(Event.ADDED_TO_STAGE, init);
    }

    public function drawIntro():void
    {           
        introMov       = new IntroMov();
        introMov.alpha = 0;

        addChild(introMov);

        TweenLite.to(introMov, 3, {alpha:1});

        // Timer
        introFader = new Timer(INTRO_DELAY);
        introFader.addEventListener(TimerEvent.TIMER, fadeIntro);
        introFader.start();

        introRemover = new Timer(INTRO_DELAY);
        introRemover.addEventListener(TimerEvent.TIMER, removeIntro);
    }

    private function fadeIntro(e:TimerEvent):void
    {
        if (i < 30){
            i++
        } else if (i == 30){
            TweenLite.to(introMov, 1.5, {alpha:0});
            introFader.removeEventListener(TimerEvent.TIMER, fadeIntro);
            introRemover.start();
        }
    }

    private function removeIntro(e:TimerEvent):void
    {           
        if (n < 10){
            n++
        } else if (n == 10){
            introRemover.removeEventListener(TimerEvent.TIMER, removeIntro);
            removeChild(introMov);
            trace("removed Intro");

            dispatchEvent (new CustomEvent(CustomEvent.COMPLETE, {})); // → Intro to Navigation
        }
    }


Navigation Class functions:

  public function drawNav():void
    {           
        weAreA       = new WeAreA();
        weAreA.alpha = 0;
        weAreA.x     = 20;
        weAreA.y     = 35;

        introText       = new IntroText();
        introText.alpha = 0;
        introText.x     = 20;
        introText.y     = 124;

        chooseAVideo       = new ChooseAVideo();
        chooseAVideo.alpha = 0;
        chooseAVideo.x     = 20;
        chooseAVideo.y     = 336;
    }

    public function addNav():void
    {
        addChild(weAreA);
        addChild(introText);
        addChild(chooseAVideo);

        TweenLite.to(weAreA, 2, {alpha:1});
        TweenLite.to(introText, 3, {alpha:1});
        TweenLite.to(introText, 3, {alpha:1});
    }
+3  A: 

Look at this line: intro.addEventListener("onComplete", nav.addNav);

When the event is fired, addNav will be called and sent an event object in the parameters.

Matt
Thanks yeah :) this same error is my bane lol!
Leon
A: 

DOH!

I forgot to add e:event = null to the function that is run by the dispatch event

Was this:

public function addNav():void

Fix (added e:Event = null):

public function addNav(e:Event = null):void
    {
        trace("addNav ----");
        addChild(weAreA);
        addChild(introText);
        addChild(chooseAVideo);

        TweenLite.to(weAreA, 2, {alpha:1});
        TweenLite.to(introText, 3, {alpha:1});
        TweenLite.to(introText, 3, {alpha:1});
    }
Leon
You don't need the "= null", only if you gonna call it directly.
M28