【问题标题】:TypeError 1009 AS3类型错误 1009 AS3
【发布时间】:2014-01-09 14:01:50
【问题描述】:

我一遍又一遍地查看这段代码,但似乎无法找到问题的根源。这是错误消息:

"TypeError: Error #1009: 
at com.senocular.utils::KeyObject/construct()[C:\Users\nti\Desktop\Ship game\com\senocular\utils\KeyObject.as:29]
at com.senocular.utils::KeyObject()[C:\Users\nti\Desktop\Ship game\com\senocular\utils\KetyObject.as:23]
at com.asgamer.basics1::Ship()[C:\Users\nti\Desktop\Ship game\com\asgamer\basics1\Ship.as:24]
at com.asgamer.basics1::Engine()[C:\Users\nti\Desktop\Ship game\com\asgamer\basics1\Engine.as:17]
"

它肯定不在 KeyObject 类中,因为它已下载并且没有任何更改(并且以前曾工作过),但无论如何这里是代码的 sn-p(注意行所在的标记):

dynamic public class KeyObject extends Proxy {

    private static var stage:Stage;
    private static var keysDown:Object;

    public function KeyObject(stage:Stage) {
        construct(stage); <---------------------------------------------LINE 23
    }

    public function construct(stage:Stage):void {
        KeyObject.stage = stage;
        keysDown = new Object();
        stage.addEventListener(KeyboardEvent.KEY_DOWN, keyPressed); <--- LINE 29
        stage.addEventListener(KeyboardEvent.KEY_UP, keyReleased);
    }

以下是导致错误的代码部分:

  package com.asgamer.basics1
{

    import flash.display.MovieClip;
    import flash.display.Stage;
    import com.senocular.utils.KeyObject;
    import flash.ui.Keyboard;
    import flash.events.Event;

    public class Ship extends MovieClip
    {

        private var stageRef:Stage;
        private var key:KeyObject;
        private var speed:Number = 0.5;
        private var vx:Number = 0;
        private var vy:Number = 0;
        private var friction:Number = 0.93;
        private var maxspeed:Number = 8;

        public function Ship(stageRef:Stage)
        {
            this.stageRef = stageRef;
            key = new KeyObject(stageRef); <----------------------------- LINE 24

            addEventListener(Event.ENTER_FRAME, loop, false, 0, true);
        }

这是引擎类:

    package com.asgamer.basics1
{
    import flash.display.MovieClip;
    import flash.display.Stage;
    import flash.events.Event;

    public class Engine extends MovieClip
    {

        private var numStars:int = 80;
        private var enemyList:Array = new Array();
        private var ourShip:Ship;


        public function Engine() : void
        {
            ourShip = new Ship(stage); <------------------------------- LINE 17
            ourShip.x = stage.stageWidth / 2;
            ourShip.y = stage.stageHeight / 2;

            stage.addChild(ourShip);



            for (var i:int = 0; i < numStars; i++)
            {
                stage.addChildAt(new Star(stage), stage.getChildIndex(ourShip));
            }

            addEventListener(Event.ENTER_FRAME, loop, false, 0, true);

如果有人能回答我真的非常感激,因为这个项目对我的期末成绩至关重要!

【问题讨论】:

  • 您的代码在 Event.ADDED_TO_STAGE 事件触发之前执行,这就是 stage 为空的原因。首先将eventListener添加到该事件中,然后在该事件的事件处理程序中编写当前在Engine Class的构造函数中的代码。

标签: actionscript-3


【解决方案1】:

Engine 类的实例正在构建中,此时 stage 属性仍为 null。这意味着 Engine 类实例尚未添加到显示列表中。

见:http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/flash/display/DisplayObject.html#stage

【讨论】:

    猜你喜欢
    • 2011-01-31
    • 1970-01-01
    • 1970-01-01
    • 2017-09-06
    • 2014-12-20
    • 1970-01-01
    • 1970-01-01
    • 2017-05-18
    • 1970-01-01
    相关资源
    最近更新 更多