AS3 - الحصول على خطأ # 1063 ، المتوقع 1 ، حصلت على 0 حتى ولو كان يعمل؟

AS3 Newby هنا!

لدي movieclip (thePlayer) على المسرح مع الطبقة 'ThePlayer' وداخل movieclip هو SimpleButton مع الفئة StopBtn. يتم حفظ كل من الفصول في مجلد يسمى "الطبقات".

تقوم فئة 'ThePlayer' بتحميل صوت إلى قناة صوتية ثم تشغيلها ، من فئة 'StopBtn' أقوم بإضافة مستمع أحداث للزر الموجود بالفعل على المسرح داخل movieclip ومن ثم إيقاف مجموعة قنوات الصوت في 'ThePlayer' من الطبقة "StopBtn".

للقيام بذلك ، أقوم بتمرير "هذا" إلى الدالة StopBtn() لتتمكن من التحكم في متغير قناة الصوت الموجود في "ThePlayer"

يبدو أن الزر يعمل بشكل مثالي ، لكنني أتلقى هذا الخطأ في لوحة المخرجات:

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()

أعتقد أنه يعتقد أنه لا يوجد شيء يتم تمريره إلى الدالة StopBtn() في فئة StopBtn ، ولكن عند تشغيل الملف والضغط على زر التوقف على المسرح ، فإنه يعمل ...

تم ضجيج رأسي ضد الجدار مع هذا لمدة 4 أيام الآن :(

إليك الكود لكلتا الفئتين:

على 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;
    }

}
}

شكرا لمساعدتك!

2
أعتقد أنك تقوم بإنشاء اثنين StopBtn s ، الأول هو الذي قمت بتعريفه على المسرح داخل movieclip - يتم إنشاؤه ولا يحصل المُنشئ على أي معلمات ، وبالتالي الخطأ. والثاني هو الذي تم إنشاؤه باستخدام الكلمة الأساسية الجديدة ولكن لا يتم إضافته أبدًا كطفل. إذا كنت ترغب في إبطال الخطأ وعدم إصلاح التعليمة البرمجية ، فيمكنك جعل recivedPlayerClass معلمة اختيارية مع: وظيفة عامة StopBtn (recivedPlayerClass: ThePlayer = null) ، ثم تحقق من للقيمة الفارغة والعودة ؛
وأضاف المؤلف Steve Lewis, مصدر

1 إجابة

أعتقد يتم إنشاء StopBtn إلى Flash IDE أو IDE لا توجد طريقة لمعرفة المعلمة التي يجب تمريرها إلى منشئ StopBtn لذلك الخطأ.

ما يمكنك القيام به على سبيل المثال هو إنشاء وسيطة افتراضية للمُنشئ أو واحدة بلا معلمة ولكن باستخدام طريقة init إضافية:

public class StopBtn extends SimpleButton {
 var playerClass:ThePlayer;

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

أو

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
وأضاف
شكرا باتريك الحل الأول يعمل! لقد حاولت الطريقة الثانية ولكني حصلت على خطأ من ThePlayer.as نفس الخطأ الأصلي ولكن ليس في لوحة ouput ، في أخطاء المترجم. الأعلى واحد يعمل على الرغم من! شكرا جزيلا :)
وأضاف المؤلف TomFrom, مصدر