神秘错误#1063:参数计数不匹配

时间:2016-08-15 03:50:27

标签: actionscript

所以我得到了一个"错误#1063:参数计数不匹配"错误。奇怪的是,它并没有阻止游戏运行,但我想知道为什么我甚至首先得到错误。完整的错误是:

ArgumentError: Error #1063: Argument count mismatch on Hock(). Expected 3, got 0.
    at flash.display::Sprite/constructChildren()
    at flash.display::Sprite()
    at flash.display::MovieClip()
    at PlayScreen()[Z:\PROJECTS\Silversound\Occulus Squish\Oculus Squish\Classes\PlayScreen.as:30]
    at Main/addPlayscreen()[Z:\PROJECTS\Silversound\Occulus Squish\Oculus Squish\Classes\Main.as:17]
    at Main()[Z:\PROJECTS\Silversound\Occulus Squish\Oculus Squish\Classes\Main.as:13]
    at runtime::ContentPlayer/loadInitialContent()
    at runtime::ContentPlayer/playRawContent()
    at runtime::ContentPlayer/playContent()
    at runtime::AppRunner/run()
    at ADLAppEntry/run()
    at global/runtime::ADLEntry()

PlayScreen的代码是:

import flashx.textLayout.formats.BackgroundColor;
import flash.display.SimpleButton;
import flash.ui.Mouse;
import flash.text.TextField;
import flash.display.MovieClip;
import flash.events.Event;
import flash.utils.Timer;
import flash.events.TimerEvent;
import flash.events.MouseEvent;
import flash.events.KeyboardEvent;
import flash.ui.Keyboard;

public class PlayScreen extends MovieClip
{

    public var batArmy:Array;
    public var hockArmy:Array;
    public var shadow:Shadow;
    public var crossHairs:CrossHairs;
    var Layer01:MovieClip;
    var Layer02:MovieClip;
    var Layer03:MovieClip; 
    var Layer04:MovieClip;
    var Layer05:MovieClip;
    var randomX:Number = 300 + (660 - 300) * Math.random();

    public function PlayScreen() 
    {
        //Mouse.hide();
        addBatButton.addEventListener(MouseEvent.CLICK, addBat);
        addHockButton.addEventListener(MouseEvent.CLICK, addHock);
        batArmy = new Array();
        hockArmy = new Array();
        //addEventListener(Event.ENTER_FRAME, crossHairsMove);
        //stage.addEventListener( KeyboardEvent.KEY_DOWN, onKeyPress );

        Layer01 = new MovieClip;
        this.addChild(Layer01);
        Layer02 = new MovieClip;
        this.addChild(Layer02);
        Layer03 = new MovieClip;
        this.addChild(Layer03);
        Layer04 = new MovieClip;
        this.addChild(Layer04);
        Layer05 = new MovieClip;
        this.addChild(Layer05);


        //add crossHair


        /*crossHairs = new CrossHairs(mouseX,mouseY,this);
        Layer05.addChild (crossHairs);
        addEventListener(Event.ENTER_FRAME, crossHairsMove);*/


    }
    /*public function onKeyPress( keyboardEvent:KeyboardEvent ):void
    {
        if ( keyboardEvent.keyCode == Keyboard.DOWN )
        {
            trace("yar");
            addBat;
        }
    }*/
    public function addBat( mouseEvent:MouseEvent ):void
    {
        var randomX:Number = 300 + (660 - 300) * Math.random();
        var newBat = new Bat( randomX, -50, this);
        batArmy.push ( newBat );
        Layer02.addChild (newBat);
    }
    public function addHock( mouseEvent:MouseEvent ):void
    {
        var newHock = new Hock(-72, 170, this);
        hockArmy.push ( newHock );
        Layer02.addChild (newHock);
    }
    /*public function crossHairsMove ( e:Event ):void
    {
        crossHairs.x = mouseX;
        crossHairs.y = mouseY;
    }*/
}

从它的外观来看,错误与Hock类有关,所以这里是代码:

import flash.display.MovieClip;
import flash.utils.Timer;
import flash.events.TimerEvent;
import flash.ui.Mouse;
import flash.events.KeyboardEvent;
import flash.ui.Keyboard;
import flash.events.Event;

public class Hock extends MovieClip
{
    private var _screen: PlayScreen;
    public var xSpeed:Number;

    public function Hock( startX:Number, startY:Number, screen:PlayScreen ) 
    {
        _screen = screen;
        x = startX;
        y = startY;
        width = 100;
        scaleY = scaleX;
        addEventListener(Event.ENTER_FRAME, moveRightFar);
        addEventListener(Event.ENTER_FRAME, moveSpeed)
    }
    public function moveSpeed( e:Event ):void
    {
        x += xSpeed;
    }
    public function moveRightFar ( e:Event): void
    {
        if (x < 0)
        {
            gotoAndStop("rollRight");
            xSpeed = 13;
        }
        else if (x >= 240)
        {
            gotoAndStop("still")
            xSpeed = 0;
        }
    }

}

现在我错了,但我认为在#34; addHock&#34;中遇到var newHock = new Hock(-72, 170, this);的问题。功能,但我有3个参数,而不是0.对吗?无论如何,就像我说的那样,它并没有阻止游戏运行,但它有点烦人,所以任何见解都是受欢迎的。我确定它显而易见。谢谢!

1 个答案:

答案 0 :(得分:0)

我有一个猜测,但我会解释我是如何到达那里的......

指向源代码的堆栈跟踪的第一行是
at PlayScreen()[Z:\PROJECTS\Silversound\Occulus Squish\Oculus Squish\Classes\PlayScreen.as:30]
它指向PlayScreen构造函数的第一行:addBatButton.addEventListener(MouseEvent.CLICK, addBat);
但显然问题不在那里......

PlayScreen 扩展 MovieClip ,因为您没有明确包含 super()语句,编译器会将其放在作为第一个命令。实际上,堆栈的前一行指向 MovieClip 的构造函数,然后指向 Sprite

的神秘constructChildren()方法

这恰好是一个内部方法,用于创建精灵的子项,您可能直接从Animate设置剪辑的阶段。

所以我的猜测是,玩家试图实例化一个扩展 Hock 的符号,并且你在某个地方定位在舞台上,当然这是通过传递零参数来实现的,因为这样做&#39;这是正常的精灵所期望的。

检查您的资料库以查看扩展 Hock 的内容,然后查看其中哪一个放置在其他符号的某个阶段。您的选择将是删除它并从代码创建它或重做类签名以获取零参数。