Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/actionscript-3/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Actionscript 3 TypeError:错误#1009_Actionscript 3_Flash - Fatal编程技术网

Actionscript 3 TypeError:错误#1009

Actionscript 3 TypeError:错误#1009,actionscript-3,flash,Actionscript 3,Flash,我有一个文档类,还有这个敌人类。我有一个函数可以在文档类中创建敌人。在这个敌人的职业中,我在测试子弹(Kogel),如果敌人离开舞台。在这两种情况下,我都会把孩子带走。它是有效的。但它给了我这个打字错误#1009。这是敌人的代码,其中“移除舞台”和“kogel hitTest”都是。(我对这艘船也有同样的问题,但那是另一次。我想我可以在解决这个问题时解决。) 编辑-以下是我的文档类代码: package { import flash.display.MovieClip; import flas

我有一个文档类,还有这个敌人类。我有一个函数可以在文档类中创建敌人。在这个敌人的职业中,我在测试子弹(Kogel),如果敌人离开舞台。在这两种情况下,我都会把孩子带走。它是有效的。但它给了我这个打字错误#1009。这是敌人的代码,其中“移除舞台”和“kogel hitTest”都是。(我对这艘船也有同样的问题,但那是另一次。我想我可以在解决这个问题时解决。)

编辑-以下是我的文档类代码:

package 
{
import flash.display.MovieClip;
import flash.events.KeyboardEvent;
import flash.events.Event;
import flash.ui.Keyboard;
import flash.ui.Mouse;
import flash.events.MouseEvent;
import flash.display.Stage;
import flash.media.Sound;

public class amateurodius extends MovieClip
{
    public var schip:ruimteschip = new ruimteschip();
    public var Kogel = new Bullet();
    var sound = new lazor();
    var BGM = new Muziek();
    var backdrop = new background();
    var shootAllow:Boolean = true;
    var enemyTime:int = 0;
    var enemyLimit:int = 50;

    public function amateurodius()
    {
        addEventListener(Event.ADDED_TO_STAGE, initialize);
    }

    function initialize(e:Event)
    {
        addChild(backdrop);
        addChild(schip);
        BGM.play();
        addEventListener(Event.ENTER_FRAME, vijandmaken);
        stage.addEventListener(KeyboardEvent.KEY_DOWN, spawnKogel);
        addEventListener(Event.ENTER_FRAME, kogelCheck);
        Mouse.hide();
    }

    public function vijandmaken(e:Event)
    {
        if (enemyTime < enemyLimit)
        {
            enemyTime++;
        }
        else
        {
            var newEnemy = new vijandEen(schip,Kogel);
            newEnemy.x = -1 * newEnemy.width;
            newEnemy.y = int(Math.random()*(stage.stageHeight - newEnemy.height));
            addChild(newEnemy);
            enemyTime = 0;
        }
    }

    public function spawnKogel(e:KeyboardEvent):void
    {
        if (shootAllow == true)
        {
            if (e.keyCode == Keyboard.SPACE)
            {
                addChild(Kogel);
                Kogel.x = schip.x;
                Kogel.y = schip.y;
                sound.play();
                shootAllow = false;
                kogelCheck(e);
            }
        }
    }

    function kogelCheck(e:Event)
    {
        if (Kogel.x < -30)
        {
            shootAllow = true;
        }
        else
        {
            shootAllow = false;
        }
    }
}
}
包
{
导入flash.display.MovieClip;
导入flash.events.KeyboardEvent;
导入flash.events.Event;
导入flash.ui.Keyboard;
导入flash.ui.Mouse;
导入flash.events.MouseEvent;
导入flash.display.Stage;
导入flash.media.Sound;
公共级业余爱好者扩展MovieClip
{
公共变量schip:ruimtestchip=新ruimtestchip();
public var Kogel=新项目符号();
var sound=新拉佐尔();
var BGM=new Muziek();
var background=新背景();
var shootAllow:Boolean=true;
var-enemyTime:int=0;
var enemyLimit:int=50;
公共功能业余爱好者()
{
addEventListener(Event.ADDED_至_阶段,初始化);
}
函数初始化(e:事件)
{
addChild(背景);
addChild(schip);
BGM.play();
addEventListener(Event.ENTER_FRAME,vijandmaken);
stage.addEventListener(KeyboardEvent.KEY_DOWN,spawnKogel);
addEventListener(Event.ENTER_FRAME,kogelCheck);
鼠标隐藏();
}
公共功能vijandmaken(e:事件)
{
如果(enemyTime
我认为您的代码一直在检查每一帧,但是当您删除它时,您会丢失对stage的引用,因此它不知道stage是什么(=
null
)。这可以在您将其从舞台上移除时发生

编辑:我还意识到,在将对象添加到stage之前,不应该初始化处理stage的事件侦听器。即:

public function vijandEen(aSchip:ruimteschip, Kogel:Bullet)
{
    theHero = aSchip;
    schot = Kogel;
    this.addEventListener(Event.ADDED_TO_STAGE, function (e:Event)
    {
        addEventListener(Event.ENTER_FRAME, vijandBewegen);
        addEventListener(Event.ENTER_FRAME, collissionSchip);
        addEventListener(Event.ENTER_FRAME, collissionKogel);
     });
 }

另外,作为旁注,您不应该使用大写字母作为变量名,而应该将它们作为类名。小写的第一个字母也是一样,它们应该为vars保留。

调试时,它指出这一行是问题所在,在函数vijandBewegen:if(this.x>stage.stageWidth)中,我指出了它。就是那个“这个”。。。我真的不知道如何解决它…好吧,只是试着删除那个“这个”,它仍然给我错误…你确定这不是舞台吗?可能是的。我在互联网上搜索解决方案,在做任何其他事情之前加载stage,但没有任何效果…对于从stage中删除它的每个函数,都是一样的,我猜你会在某个地方保留一个指向这个对象的指针,这样Flash就不会对它进行垃圾收集。好吧,我也把文档类代码放到了原始帖子中。很抱歉,这是我有史以来的第一次编程任务。所以有时候我很难找出错误。没关系,你试过我的帖子吗?有效吗?如果无效,请在条件之前添加
trace(stage)
,我很好奇它何时开始说null(如果这是问题的话)嗯,似乎子弹与敌人碰撞的那一刻,stage就变成了“null”。因此,问题可能出在函数CollisionKogel上,它可以查看子弹是否击中敌人。
private function stopEvents():void
{
    this.removeEventListener(Event.ENTER_FRAME, vijandBewegen);
    this.removeEventListener(Event.ENTER_FRAME, collissionSchip);
    this.removeEventListener(Event.ENTER_FRAME, collissionKogel);
}
function vijandBewegen(e:Event)
{
    x +=  speed;
    if (this.x > stage.stageWidth)
    {
        stopEvents();
        this.parent.removeChild(this);
    }
}

function verwijderEnemy(e:Event)
{
    if (this.parent != null)
    {
        stopEvents();
        this.parent.removeChild(this); 
    }
}
public function vijandEen(aSchip:ruimteschip, Kogel:Bullet)
{
    theHero = aSchip;
    schot = Kogel;
    this.addEventListener(Event.ADDED_TO_STAGE, function (e:Event)
    {
        addEventListener(Event.ENTER_FRAME, vijandBewegen);
        addEventListener(Event.ENTER_FRAME, collissionSchip);
        addEventListener(Event.ENTER_FRAME, collissionKogel);
     });
 }