【发布时间】: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