【问题标题】:How is my AS3 class passing 0 arguments even though I specified one?即使我指定了一个参数,我的 AS3 类如何传递 0 个参数?
【发布时间】:2020-05-23 23:14:33
【问题描述】:

基本上是这样;我正在使用 ActionScript 3 开发一个测试游戏项目,并决定创建一个类来充当某种射弹。

这是类的代码:

package  {

    import flash.display.MovieClip;
    import flash.events.Event;

    public class Symbol1 extends MovieClip {

        public var dir:Number;

        public function Symbol1(dir:Number) {
            // constructor code
            this.dir = dir;
            this.addEventListener(Event.ENTER_FRAME, speen);
        }
        public function speen(e:Event):void
        {
            e.target.x += 10*Math.cos(e.target.dir);
            e.target.y += 10*Math.sin(e.target.dir);
        }
    }

}

上述方法似乎有效;但是实例化它是一个全新的问题。

var a = new Symbol1(5);

以上代码输出:

> ArgumentError: Error #1063: Argument count mismatch on Symbol1(). Expected 1, got 0.
at flash.display::Sprite
/constructChildren()
    at flash.display::Sprite()
    at flash.display::MovieClip()
    at PROJECT_fla::MainTimeline()

我应该如何让它通过“dir”参数?

【问题讨论】:

  • 你确定你没有在设计模式的舞台上放置那个 Symbol1 的实例吗?

标签: actionscript-3 actionscript


【解决方案1】:

对于初学者:只需将整个“e.target”放入 speen,因为您的 EnterFrame 事件中没有 x、y 和 dir。

【讨论】:

  • 您对删除 e.target 部分是正确的,因为 speen 是一个绑定方法,因此它在相同的实例上下文中运行,因此通过 Event.target 引用寻址自我是一种矫枉过正。尽管如此, Event.target 属性被声明为 Object 所以不应该有任何编译时错误,只要 Event.target包含对真正具有 xydir 属性的东西的引用,也不应该存在运行时问题。基本上,它在语法或逻辑上都没有错误,只是过于复杂了。
【解决方案2】:

您在 fla 的某处有一个 Symbol1 的实例并出现在场景中。该错误不是由“var a = new Symbol1(5);”触发的但是通过已经存在的符号 sw。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-01
    • 2013-05-03
    • 2014-07-23
    • 2011-06-26
    • 2018-08-07
    • 1970-01-01
    相关资源
    最近更新 更多