【发布时间】:2013-11-01 17:55:18
【问题描述】:
Main.as
package{
import flash.display.MovieClip;
import flash.events.*;
public class Main extends MovieClip {
public var _root:MovieClip;
public var monsterContainer:MovieClip = new MovieClip();
public var delay = 30;
public function Main(){
addEventListener(Event.ADDED, beginClass);
addEventListener(Event.ENTER_FRAME, enterFrameEvents);
}
function beginClass(e):void{
_root = MovieClip(root);
}
function enterFrameEvents(e):void{
addChild(monsterContainer);
delay -= 1;
if(delay <= 0){
var spawn:Slime = new Slime();
spawn.x = startPoint.x;
spawn.y = startPoint.y;
monsterContainer.addChild(spawn);
delay = 30;
}
}
}
箭头.as
package{
import flash.display.MovieClip;
import flash.events.*;
public class Arrow extends MovieClip {
public var _root:MovieClip;
public var facingID;
public function Arrow(){
addEventListener(Event.ADDED, beginClass);
addEventListener(Event.ENTER_FRAME, enterFrameEvents);
}
function beginClass(e):void{
_root = MovieClip(root);
}
function enterFrameEvents(e):void{
trace(_root.monsterContainer == null);
}
}
在输出中它看起来像这样:
false
false
false
false
false
TypeError: Error #1009: Cannot access a property or method of a null object reference.
at Arrow/enterFrameEvents()
TypeError: Error #1009: Cannot access a property or method of a null object reference.
at Arrow/enterFrameEvents()
一开始说false是因为trace(_root.monsterContainer == null),但是突然说error 1009,我用ctrl+shift+enter的时候,指向trace(_root.monsterContainer == null);
我试了两天,请帮忙
其他代码:(实际上可能不相关)
敌人.as
package{
import flash.display.MovieClip;
import flash.events.*;
public class Enemy extends MovieClip {
public var _root:MovieClip;
//Status
public var monsterSpeed;
public var facing = "Right";
//CallingArrow
public var down:Down = new Down();
public function Enemy(){
addEventListener(Event.ADDED, beginClass);
addEventListener(Event.ENTER_FRAME, enterFrameEvents);
}
function beginClass(e):void{
_root = MovieClip(root);
}
function enterFrameEvents(e):void{
//Facing Movement
if(_root.pausing == false){
if(facing == "Right"){
this.x += monsterSpeed;
}else if(facing == "Left"){
this.x -= monsterSpeed;
}else if(facing == "Down"){
this.y += monsterSpeed;
}else if(facing == "Up"){
this.y -= monsterSpeed;
}
}
}
}
下来.as
package {
import flash.display.MovieClip;
import flash.events.*;
public class Down extends Arrow {
public function Down(){
facingID = "Down";
}
}
史莱姆.as
package {
import flash.display.MovieClip;
import flash.events.*;
public class Slime extends Enemy {
public function Slime(){
monsterSpeed = 5;
}
}
时间轴上没有额外的代码,只需 stop();
如果你需要文件(cs6):http://www.mediafire.com/download/hz5tptkgftwdipw/Tower_Defense.rar
【问题讨论】:
-
看起来 _root 以某种方式变为空。如果 monsterContainer 为 null,它不会抛出错误,你只会得到一个 true 的痕迹。
-
是的,它应该被追踪为真的,但是我知道为什么突然出现错误 1009,这太烦人了,知道吗?
-
我怀疑你没有在这里显示完整的代码。您要删除箭头实例吗?你甚至在哪里实例化它?它在任何地方都看不到......
-
@Fygo 其他代码与此无关,嗯,我不删除箭头实例,所以箭头就像一个 .as 从 Main.as 跟踪 monsterContainer
-
@YogaAdyaPratama 您操作和实例化箭头的代码与您的问题有关,因为它是向您抛出错误的对象。除非您更改了“_root”、“monsterContainer”或箭头实例/引用,否则这种情况不太可能发生。你肯定会做其中之一。
标签: actionscript-3 flash adobe flash-cs6