AS3 - Krijgt fout # 1063, verwachte 1, kreeg 0 hoewel het werkt?

AS3 nieuw hier!

Ik heb een filmclip (thePlayer) op mijn podium met de klasse 'ThePlayer' en in die filmclip zit een SimpleButton met de klasse StopBtn. Beide klassen worden opgeslagen in een map die 'klassen' wordt genoemd.

'ThePlayer' klasse laadt een geluid in een soundchannel en speelt dan, uit de 'StopBtn' class voeg ik een gebeurtenislistener toe voor de knop die al op het podium in de filmclip is en stop dan de soundchannel var ingesteld in 'ThePlayer' van de klasse 'StopBtn'.

Om dit te doen geef ik 'dit' door aan de functie StopBtn() om de soundchannel-variabele in 'ThePlayer' te kunnen regelen

De knop lijkt perfect te werken, maar ik krijg deze foutmelding in het uitvoerpaneel:

ArgumentError: Error #1063: Argument count mismatch on classes::StopBtn(). Expected 1, got 0.
at flash.display::Sprite/constructChildren()
at flash.display::Sprite()
at flash.display::MovieClip()
at classes::ThePlayer()
at flash.display::Sprite/constructChildren()
at flash.display::Sprite()
at flash.display::MovieClip()

Ik denk dat het denkt dat er niets wordt doorgegeven aan de functie StopBtn() in de klasse StopBtn, maar wanneer ik het bestand uitvoer en op de stopknop op het werkvlak druk, werkt het ...

Been nu 4 dagen lang met mijn hoofd tegen de muur gebotst :(

Hier is mijn code voor beide klassen:

ThePlayer.as

package classes
{

import flash.display.*;
import flash.media.*;
import flash.net.*;
import flash.events.*;

public class ThePlayer extends MovieClip
{

    //Link vars to classes for accessing vars here in different classes
    public var _stopBtn:StopBtn;

   //Public and private Vars
    public var mySound:Sound = new Sound();
    public var mySoundChannel:SoundChannel = new SoundChannel();
    public var trackPosition:Number = 0;
    public var isPlaying:Boolean = false;


    //Constructor function
    public function ThePlayer()
    {
        _stopBtn = new StopBtn(this);

        mySound.load(new URLRequest("mp3_files/song.mp3"));
        mySoundChannel = mySound.play();
        isPlaying = true;
    }
}
}

StopBtn.as

package classes
{

import flash.display.*;
import flash.media.*;
import flash.net.*;
import flash.events.*;

public class StopBtn extends SimpleButton
{

    var playerClass:ThePlayer;

    public function StopBtn(recivedPlayerClass:ThePlayer)
    {
        playerClass = recivedPlayerClass;
        playerClass.addEventListener(MouseEvent.CLICK, stopButtonFunction);
    }

    function stopButtonFunction(event:MouseEvent):void
    {
        playerClass.trackPosition = 0;
        playerClass.mySoundChannel.stop();
        playerClass.isPlaying = false;
        //playerClass.pauseBtn.visible = false;
        //playerClass.playPause.playBtn.visible = true;
    }

}
}

Bedankt voor je hulp!

2
Ik geloof dat je twee StopBtn s aanmaakt, de eerste is degene die je hebt gedefinieerd op het podium in de filmclip - het wordt aangemaakt en de constructor krijgt geen parameters, vandaar de fout. De tweede is degene die is geïnstantieerd met uw nieuwe -woord maar nooit als een kind is toegevoegd. Als u de fout wilt onderdrukken en de code niet wilt repareren, kunt u de recivedPlayerClass een optionele parameter maken met: openbare functie StopBtn (recivedPlayerClass: ThePlayer = null) , vink vervolgens voor null en return;
toegevoegd de auteur Steve Lewis, de bron

1 antwoord

Ik veronderstel dat StopBtn is gemaakt in Flash IDE, of de IDE kan niet weten welke parameter moet wofden doofgegeven aan de StopBtn-constructof, vandaar de fout.

Wat u bijvoofbeeld kunt doen is een standaardargument voof de constructof maken of een zonder parameter, maar met een extra init-methode:

public class StopBtn extends SimpleButton {
 var playerClass:ThePlayer;

 public function StopBtn(recivedPlayerClass:ThePlayer = null)//default constuctof
 { 
   if (recivedPlayerClass!=null) {
     playerClass = recivedPlayerClass;
     playerClass.addEventListener(MouseEvent.CLICK, stopButtonFunction);
   } 
 }
//...

of

public class StopBtn extends SimpleButton {
 var playerClass:ThePlayer;

 public function StopBtn() {
 }

 public function init(recivedPlayerClass:ThePlayer):void {
     playerClass = recivedPlayerClass;
     playerClass.addEventListener(MouseEvent.CLICK, stopButtonFunction);
 }
//...
1
toegevoegd
Bedankt Patrik de eerste oplossing werkt! Ik heb de tweede manier geprobeerd, maar ik krijg een fout van ThePlayer.as hetzelfde als de oorspronkelijke fout maar niet in het paneel van de uitgang, in de compilerfouten. De bovenste werkt echter prima! dank je :)
toegevoegd de auteur TomFrom, de bron