Я просматривал этот код снова и снова, но просто не мог найти, где проблема коренится. Вот сообщение об ошибке:TypeError 1009 AS3
"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, так что это скачал и не изменен ни в одном (и работал раньше), но вот что фрагмент кода в любом случае (обратите внимание на маркеры, где линии):
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 обжигают, поэтому этап проходит нуль. Первый addeventListener для этого события, а затем в обработчике события этого события напишите код, который в настоящее время находится в конструкторе класса Engine. – Sumit