0

我是 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:错误 #2012:无法创建类 GameObjectController$。

我究竟做错了什么?

4

3 回答 3

3

来自文档:InteractiveObject

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

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

于 2012-12-17T06:14:04.167 回答
1

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();
        }
    }
}
于 2012-12-17T06:16:48.707 回答
1

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

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

所以改为使用(例如):

public class GameObjectController extends Sprite
{
    ....
}

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

于 2012-12-17T06:15:09.003 回答