【问题标题】:Class can not be created无法创建类
【发布时间】:2012-12-17 06:06:18
【问题描述】:

我是 ActionScript 的新手,我正在尝试制作我的第一个应用程序。我有一个主类 - Sprite 的子类。另一个类,应该管理一些事件,比如键盘的按键。这是它的初始化:

private var controller:GameObjectController;
...
controller = new GameObjectController(this);

这里是controller:GameObjectController 本身:

public class GameObjectController extends InteractiveObject
{
    var textField:TextField;

    public function GameObjectController(mainSprite: Sprite)
    {
    addEventListener(KeyboardEvent.KEY_DOWN, onKeyDown);

    textField = new TextField();
    textField.text = "Hello, World";
    mainSprite.addChild(textField);
    }

    private function onKeyDown(event: KeyboardEvent):void
    {
    textField.text = event.keyCode.toString();
    }

}

但是当我尝试运行它时,我有一个错误:

ArgumentError: Error #2012: Class GameObjectController$ can not be 已创建。

我做错了什么?

【问题讨论】:

    标签: actionscript-3


    【解决方案1】:

    来自文档:InteractiveObject

    InteractiveObject 类本身不包含任何 API 在屏幕上呈现内容。创建自定义子类 InteractiveObject 类,扩展具有的子类之一 用于在屏幕上呈现内容的 API,例如 Sprite、SimpleButton、 TextField 或 MovieClip 类。

    所以我建议尝试将 Sprite 子类化,看看是否能解决您的问题。

    【讨论】:

    • 用这句话打败了我 ;)
    【解决方案2】:

    首先,不要扩展 InteractiveObject。正如 API 所说:

    InteractiveObject 类本身不包含任何用于在屏幕上呈现内容的 API。要创建 InteractiveObject 类的自定义子类,请扩展具有用于在屏幕上呈现内容的 API 的子类之一,例如 Sprite、SimpleButton、TextField 或 MovieClip 类。

    所以改为使用(例如):

    public class GameObjectController extends Sprite
    {
        ....
    }
    

    其次,构造函数的参数需要与扩展类相同 - 对于显示类,这意味着零参数。

    【讨论】:

    • "构造函数的参数需要与扩展类相同" - 这绝对是错误的,构造函数可以有任何参数,你只需要使用它期望的参数调用super(),其他一切随心所欲。
    【解决方案3】:

    flash.display.InteractiveObject 是一个不能被子类化的抽象类。而是从flash.display.Sprite 扩展。

    不要忘记导入 Sprite 并将您的代码放在一个包中:

    package
    {
        import flash.display.Sprite;
    
        public class GameObjectController extends Sprite
        {
            var textField:TextField;
    
            public function GameObjectController(mainSprite: Sprite)
            {
                addEventListener(KeyboardEvent.KEY_DOWN, onKeyDown);
    
                textField = new TextField();
                textField.text = "Hello, World";
                mainSprite.addChild(textField);
            }
    
            private function onKeyDown(event: KeyboardEvent):void
            {
                textField.text = event.keyCode.toString();
            }
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-15
      • 1970-01-01
      • 1970-01-01
      • 2017-03-07
      • 2011-09-09
      相关资源
      最近更新 更多