У меня раздражающая проблема. Я немного погуглил и не могу найти хороших ответов, поэтому надеюсь найти здесь помощь.
Я получаю эту ошибку, которая кажется довольно распространенной:
TypeError: Error #1006: update är inte en funktion. // = update is not a function (english)
at se.qmd.spaceInvaders::ShipHandler/onEnterFrame()
Обновление определенно является функцией, поэтому я действительно не могу понять, в чем проблема.
Моя настройка. Я использую Flashdevelop. У меня есть класс Main , который установлен как класс документа в моем файле fla .
У меня есть структура пакета с моим главным классом в папке src , а мои подклассы в se.qmd.spaceInvaders и se.qmd.starLight . Я также использую TweenMax и сохраняю его в «нормальной» структуре пакета из папки src.
В классе Main я добавляю на сцену экземпляр класса LeGun , который также является «экспортированным» мувиклипом в файле fla, экземпляром класса StarHandler и экземпляром класса ShipHandler. У меня также есть слушатель клавиатуры, который с помощью функции enterframe перемещает мой экземпляр класса LeGun.
Хорошо, без проблем. StarHandler работает должным образом, а ShipHandler работает должным образом, пока я не вызову 1 или 2 метода в классе Ship , который также является «экспортированным» мувиклипом в файле fla. Класс Ship - это, конечно, класс, содержащий Ship, который обрабатывается ShipHandler.
Ниже приведены мои классы ShipHandler и Ship, и я надеюсь, что это не увеличит длину поста.
ShipHandler.as:
package se.qmd.spaceInvaders {
import flash.display.MovieClip;
import se.qmd.spaceInvaders.Ship;
import flash.display.Stage;
import flash.events.Event;
public class ShipHandler extends MovieClip {
private var _shipArray:Array = [];
private const NUM_START_SHIPS:int = 25;
private var s:Stage = null;
private var _directionX:Number = 1;
private var _directionY:Number = 1;
private var _velocityX:Number;
private var _velocityY:Number;
private const YBORDER_TOP:int = 50;
private const YBORDER_BOTTOM:int = 525;
public function ShipHandler(o:Stage) {
s = o; // tar emot stage från main
createObjects();
this.addEventListener(Event.ENTER_FRAME, onEnterFrame);
}
private function createObjects():void {
for (var i:int = 0; i < NUM_START_SHIPS; i++) {
var aShip:Ship = new Ship();
aShip.x = Math.random() * (s.stageWidth - aShip.width) + aShip.width / 2;
aShip.y = Math.random() * (s.stageHeight - aShip.height -135) + aShip.height / 2 + 55;
this.addChild(aShip);
_shipArray.push(aShip);
aShip.startMove(Math.random(), Math.random());
}
}
private function onEnterFrame(e:Event):void {
for (var i:int = 0; i < _shipArray.length; i++) {
var aShip:Ship = _shipArray[i] as Ship;
aShip.update();
}
}
}
}
Ship.as:
package se.qmd.spaceInvaders {
import flash.display.MovieClip;
import flash.events.Event;
public class Ship extends MovieClip {
private var _directionX:Number = 1;
private var _directionY:Number = 1;
private var _velocityX:Number;
private var _velocityY:Number;
private const YBORDER_TOP:int = 50;
private const YBORDER_BOTTOM:int = 525;
public function Ship() {
//s = o; // tar emot stage
this.addEventListener(Event.ADDED_TO_STAGE, onAddedToStage);
}
private function onAddedToStage(e:Event):void {
removeEventListener(Event.ADDED_TO_STAGE, onAddedToStage);
this.width = 50;
this.height = 18;
}
public function update():void {
// x led vänster kant
if(this.x <= this.width / 2) {
this.x = this.width / 2;
_directionX *= -1;
}
// x led höger kant
if(this.x >= 800 - this.width / 2) {
this.x = 800 - this.width/2;
_directionX *= -1;
}
// y led top kant
if(this.y <= YBORDER_TOP + this.height/2) {
this.y = YBORDER_TOP + this.height / 2;
_directionY *= -1;
}
// y led botten kant
if(this.y >= YBORDER_BOTTOM - this.height/2) {
this.y = YBORDER_BOTTOM - this.height / 2;
_directionY *= -1;
}
this.x += _velocityX * _directionX;
this.y += _velocityY * _directionY;
}
public function startMove(directionX:Number, directionY:Number):void {
trace(directionX, directionY);
_velocityX = 10;
_velocityY = 10;
if (directionX < 0.5) {
_directionX = -1;
}
if (directionY < 0.5) {
_directionY = -1;
}
}
public function changeDirection():void {
_directionX *= -1;
_directionY *= -1;
}
}
}
Как только я вызываю методы startMove или update из ShipHandler, я получаю сообщение об ошибке, которое я написал выше.
Буду признателен за любую помощь, как мне кажется, я должен делать что-то в корне неправильно ...