-1

请原谅我对此感到不快(我是 Flash 新手),但我已经到处搜索了 3 天才找到这个,我尝试了很多不同的东西,但似乎没有任何效果。这应该很简单...

场景:简单的游戏,玩家穿越太空射击坏人。(我的起始步骤是这个很棒的教程: http: //www.makeflashgames.com/tutorials/tut4.php

我现在想让我的敌人在检测到碰撞时爆炸。我用我的爆炸动画制作了一个新的影片剪辑,将该影片剪辑放到我的敌人影片剪辑的帧中。这个框架我标记为爆炸。

在 GameController.as 上,我查看了检测到子弹碰撞时移除 Enemy 的代码,并移除了 removechild 代码,并将其替换为: Enemy.gotoAndPlay("Explode"); 这给了我错误 1061:通过静态类型 Class 的引用调用可能未定义的方法 gotoAndPlay。

我试过 _root.Enemy.gotoAndPlay("Explode"); 它不起作用(我读到 _root 在 as3 中不起作用)

我错过了什么?

我写的代码在几个不同的领域。在gamecontroller.as我有

        for (var i=bullets.length - 1; i >= 0; i--)
        {
            for (var j=enemies.length - 1; j >= 0; j--)
            {
                if (bullets[i].hitTestObject(enemies[j].collisionArea))
                {

                    playerScore +=  enemies[j].getPointsWorth();

                    mcGameStage.removeChild(bullets[i]);
                    bullets.splice(i,1);

                    Enemy.gotoAndPlay("Explode");

                    break;
                }
            }
        }

如果我删除 gotoandplay,然后放入

mcGameStage.removeChild(敌人[j]); 敌人。拼接(j,1);

然后游戏运行正常(没有爆炸动画)

@Sunil D.:您的代码就像一个魅力。然而,它给我留下了一个新问题。当爆炸动画结束时我需要移除我的敌人(第 35 帧)我尝试了这段代码

enemy.addEventListener(Event.ENTER_FRAME,checkFrame);

function checkFrame(event:Event):void
    {
        if (enemy.currentFrame  ==  35)
            {
                  mcGameStage.removeChild(enemies[j]);
                  enemies.splice(j,1);
                  enemy.removeEventListener(Event.ENTER_FRAME,checkFrame);
            }
    }

这给了我错误 #2007:参数 child 必须为非空。在 Flash.display::DisplayObjectContainer/removeChild() 在 MethodInfo-243()

有任何想法吗?

4

1 回答 1

0

您得到的错误是,当您Enemy.gotoAndPlay("Explode");尝试调用类本身的gotoAndPlay()方法时。Enemy相反,您需要在 Enemy 类的实例gotoAndPlay()上调用该方法。

从您显示的代码中,看起来您的数组中有Enemy该类的实例(它是一个对象数组)。所以你可能应该能够通过这样做来爆炸敌人:enemiesEnemy

var enemy:Enemy = enemies[j] as Enemy;
enemy.gotoAndPlay("Explode");
于 2013-03-08T04:22:42.227 回答