在ActionScript 3.0中删除孩子



这是我的第一个问题,但是我最近一直在遇到这个问题,需要一些帮助。

我正在为周末编程一个小的Android游戏,我在使我的船的子弹击中敌人时遇到了问题,两者都消失了...

我会给你一个我的代码的摘要:

stage.addEventListener(Event.ENTER_FRAME, Update);
LeftButton.addEventListener(TouchEvent.TOUCH_OVER, LBOn);
LeftButton.addEventListener(TouchEvent.TOUCH_BEGIN, LBTouch);
LeftButton.addEventListener(TouchEvent.TOUCH_OUT, LBOff);
LeftButton.addEventListener(TouchEvent.TOUCH_END, LBRelease);
RightButton.addEventListener(TouchEvent.TOUCH_OVER, RBOn);
RightButton.addEventListener(TouchEvent.TOUCH_BEGIN, RBTouch);
RightButton.addEventListener(TouchEvent.TOUCH_OUT, RBOff);
RightButton.addEventListener(TouchEvent.TOUCH_END, RBRelease);
BA.addEventListener(TouchEvent.TOUCH_BEGIN, Shoot);

这是我舞台的活动听众块。当前所有的EventListeners都在这很小的部分,非常简单,它们在我所做的工作中可以正常工作,但是最后一个事件称为功能拍摄,这就是事情变得棘手...

function Shoot(TouchEvent) {
        SpawnBullet();
    };

好,很简单。只是一个调用另一个功能来产生我的子弹的功能,我看到的方式没有太大伤害...

这就是我尝试运行代码的方式:

function SpawnBullet() {
        var Bullet:Bullet1 = new Bullet1();
        stage.addChild(Bullet);
            Bullet.x = Player.x;
            Bullet.y = Player.y - (Player.height / 2);
                Bullet.addEventListener(Event.ENTER_FRAME, BulletUpdate);
                    function BulletUpdate(Event) {
                        Bullet.y -= 20;
                        if(Bullet.y <= 100) {
                            Bullet.removeEventListener(Event.ENTER_FRAME, BulletUpdate);
                            stage.removeChild(Bullet);
                            Bullet = null;
                        };
                    };
    };    

当我运行游戏时,我会收到此错误:

ReferenceError: Error #1069: Property ENTER_FRAME not found on flash.events.Event and there is no default value.
at Function/Shooter_fla:MainTimeline/SpawnBullet/Shooter_fla:BulletUpdate()[Shooter_fla.MainTimeline::frame1:41]

我不是想伪造自己的技能,我认为我不知道添加和删除子女是如何工作的,而且由于我讨厌仅搜索网络寻找某种方法,而无需学习某种方法,所以来这里寻求帮助。预先感谢您的任何帮助!

该错误与添加/删除孩子无关。您的错误是声明函数参数事件,其名称与类名称相同,因此编译器被混淆了。另外,作为附带说明,请尽量避免在功能中声明功能,就像欢迎痛苦和恐怖。

我认为您的代码会很好如下:

function SpawnBullet():void
{
    // With the "new" operator you can omit () if constructor has no arguments.
    var aBull:Bullet1 = new Bullet1;
    stage.addChild(aBull);
    aBull.x = Player.x;
    aBull.y = Player.y - (Player.height / 2);
    aBullet.addEventListener(Event.ENTER_FRAME, BulletUpdate);
}
function BulletUpdate(e:Event):void
{
    // Get the reference to the bullet from the event.
    // Alternately you might store it in a variable outside of both functions.
    var aBull:Bullet1 = e.target as Bullet1;
    aBull.y -= 20;
    if (aBull.y <= 100)
    {
        aBull.removeEventListener(Event.ENTER_FRAME, BulletUpdate);
        stage.removeChild(aBull);
    }
}

p.s。不要害羞地彻底格式化代码。这并不是看起来那么麻烦,很快您就会习惯它,而格式化的代码干净且可读性,并且可以通过正确进行格式来避免某些错误。

最新更新