我遇到错误#1009:无法访问空对象引用的属性或方法。我不确定如何自己解决这个问题,我已经跟踪过,看看对象变量enemySpawnTimer:Timer是否实际为空,而不是。所以我不明白为什么我会收到这个错误。
无论如何这里是我的代码,它是我用来产生从屏幕顶部落到底部的块的类,一旦到达屏幕底部就会从舞台上移除。
package scripts
{
import flash.events.Event;
import flash.display.Stage;
import flash.events.Event;
import flash.events.TimerEvent;
import flash.utils.Timer;
import flash.display.DisplayObject;
public class EnemySpawner
{
var stageRef:Stage;
var target:Player;
//vector variables
public static var vectorBlock:Vector.<Block> = new Vector.<Block>();
//enemy variables
public static var block:Block;
//timer variables
var enemySpawnTimer:Timer = new Timer(250);
//score variables
public static var pointsBlock:Number = 0;
public function EnemySpawner(stageRef:Stage, target:Player)
{
this.stageRef = stageRef;
this.target = target;
enemySpawnTimer.addEventListener(TimerEvent.TIMER, SpawnBlocks, false, 0, true);
enemySpawnTimer.start();
}
private function SpawnBlocks(e:TimerEvent):void
{
block = new Block(stageRef);
pointsBlock = block.pointsGiven;
vectorBlock.push(block);
stageRef.addChild(block);
block.addEventListener(Event.ENTER_FRAME, Update, false, 0, true);
}
private function Update(e:Event):void
{
//remove enemies when they pass the bottom of the stage
for each(var block:Block in vectorBlock)
{
if(block.y > Bounds.rectH + block.height)
{
RemoveFromList(block);
}
}
target.addEventListener("playerDeath", StopSpawning, false, 0, true);
}
private function RemoveFromList(block:Block):void
{
vectorBlock.splice(vectorBlock.indexOf(block), 1);
if(stageRef.contains(block))
{
stageRef.removeChild(block);
}
}
private function StopSpawning(e:Event):void
{
enemySpawnTimer.stop();
}
}
}
这是我得到的错误,不幸的是,使用flash中的脚本编辑器对于错误导致错误的位置或原因并没有太大帮助。
TypeError: Error #1009: Cannot access a property or method of a null object reference.
at scripts::EnemySpawner/SpawnBlocks()
at flash.utils::Timer/_timerDispatch()
at flash.utils::Timer/tick()
答案 0 :(得分:1)
当某些东西为空时通常会发生这个错误,我最好的猜测是“stageRef” 尝试添加
stageRef = new Stage();
前
this.stageRef = stageRef;
为了更好的调试,你可以做的另一件事是允许它,这样做点击文件/发布设置/ flash 并勾选“允许调试”,然后重新发布它再次看到你的错误,这次它会让你知道导致错误的帧和行号。
答案 1 :(得分:0)
如果我正确理解错误的最后一点,那么它是否必须是SpawnBlocks()方法中的null?我会看看stageRef和vectorBlock,也许是block.pointsGiven。