Arrays 动作脚本3:角色命中测试对象,所有对象都在数组中

Arrays 动作脚本3:角色命中测试对象,所有对象都在数组中,arrays,actionscript-3,flash,collision-detection,movieclip,Arrays,Actionscript 3,Flash,Collision Detection,Movieclip,首先,感谢所有阅读此问题的人的关注 我是印尼人,如果我的英语不好,请道歉 我目前正在一个学校项目中,使用Flash ActionScript 3或Unity创建触摸屏Android游戏,我目前的项目是使用Flash和ActionScript 3制作的。我目前的工作是一个疯狂喂食的游戏,其中包括一名女性潜水者,她将消灭掉掉在水下的鱼炸弹 我想提醒潜水员注意屏幕上的炸弹。我有一个炸弹杀手类,它将调用一个常规炸弹类,使其落在随机的x位置。所有RegularBomb实例都放置在一个数组中,然后我使用hi

首先,感谢所有阅读此问题的人的关注

我是印尼人,如果我的英语不好,请道歉

我目前正在一个学校项目中,使用Flash ActionScript 3或Unity创建触摸屏Android游戏,我目前的项目是使用Flash和ActionScript 3制作的。我目前的工作是一个疯狂喂食的游戏,其中包括一名女性潜水者,她将消灭掉掉在水下的鱼炸弹

我想提醒潜水员注意屏幕上的炸弹。我有一个炸弹杀手类,它将调用一个常规炸弹类,使其落在随机的x位置。所有RegularBomb实例都放置在一个数组中,然后我使用hitTestObject进行每个循环,因此如果潜水员击中movieclip内的透明圆,将出现感叹号,并将潜水员类中的readyToDefuse布尔值设置为true,当潜水员远离bomb时,布尔值将设置为false,感叹号将消失

我的问题是潜水员只能和最后一部炸弹电影互动。当第一个炸弹孩子加入到阵列中,潜水员到达时,感叹号会出现,但每次新炸弹实例化时,感叹号都会消失,我必须让潜水员移动到新炸弹实例化处,使其出现

我已经阅读了关于这个问题的建议:删除for each循环中的else语句,但删除它将使readyToDefuse保持为True,感叹号保持出现

我做了谷歌搜索,似乎没有什么能回答我的问题,我必须完成这个游戏一周,直到演示,这让我在过去的几天里感到困惑

以下是我的炸弹杀手类的完整代码:

package  {
    import flash.display.MovieClip;
    import flash.display.Sprite;
    import flash.events.Event;

    public class BombsLayer extends MovieClip{
        public var area:Sprite;
        public var bombs:Array;
        public var bomb:RegularBomb;
        public var bombground:BombGround;
        public var diver:Diver;
        public var warner:BombWarn;

        public function BombsLayer(character:Diver, warn:BombWarn){
            // constructor code
            area = new Sprite();
            area.graphics.beginFill(000000, 0);
            area.graphics.drawRect(0,0,2200,720);
            area.graphics.endFill();
            addChild(area);

            diver = character;
            warner = warn;

            bombs = new Array();
            var newBomb = new RegularBomb(Math.random()*area.width, diver, warner);
            bombs.push(newBomb)
            addChild(newBomb);

            bombground = new BombGround(0, 670, this);
            addChild(bombground);

            this.addEventListener(Event.ENTER_FRAME, moveBomb);
        }
        function moveBomb(event:Event){
            if(Math.random() <= 0.0005){
                var newBomb = new RegularBomb(Math.random()*area.width, diver, warner);
                bombs.push(newBomb)
                addChild(newBomb);
            }
            for each(var bomb:RegularBomb in bombs){
                bomb.moveDown();
                if(diver.hitTestObject(bomb)){
                    warner.visible = true;
                    diver.readyToDefuse = true;
                }
                else{
                    warner.visible = false;
                    diver.readyToDefuse = false;
                }
            }
        }
    }
}
包{
导入flash.display.MovieClip;
导入flash.display.Sprite;
导入flash.events.Event;
公共级炸弹杀手电影剪辑{
公共区域:雪碧;
公共var炸弹:阵列;
公共var炸弹:常规炸弹;
公共战场:战场;
公共var潜水员:潜水员;
公共var警告:BombWarn;
公共功能炸弹杀手(角色:潜水员,警告:炸弹警告){
//构造代码
面积=新精灵();
面积.graphics.beginll(000000,0);
面积.图形.drawRect(0,02200720);;
area.graphics.endFill();
addChild(区域);
潜水员=性格;
华纳=警告;
炸弹=新阵列();
var newBomb=新的常规炸弹(Math.random()*area.width,diver,warner);
炸弹。推(新炸弹)
addChild(newBomb);
轰炸场=新轰炸场(0670,本);
addChild(爆炸场);
this.addEventListener(Event.ENTER_FRAME,moveBomb);
}
功能(事件:事件){

如果(Math.random()逻辑是错误的。你需要浏览炸弹,找到一个与潜水员有联系的炸弹(如果有的话),然后使用唯一的炸弹。否则潜水员已经准备好拆除炸弹A,但还没有准备好拆除炸弹B、C和D,因此根本没有准备好

function moveBomb(event:Event)
{
    var aBomb:RegularBomb;

    if (Math.random() <= 0.0005)
    {
        aBomb = new RegularBomb(Math.random() * area.width, diver, warner);
        bombs.push(aBomb)
        addChild(aBomb);
    }

    for each(aBomb in bombs) aBomb.moveDown();

    // Find bomb in diver's vicinity.
    aBomb = findBomb();

    // The same as "if (aBomb != null)"
    if (aBomb)
    {
        warner.visible = true;
        diver.readyToDefuse = true;
    }
    else
    {
        warner.visible = false;
        diver.readyToDefuse = false;
    }
}

function findBomb():RegularBomb
{
    for each(var aBomb:RegularBomb in bombs)
        if (diver.hitTestObject(aBomb))
            return aBomb;

    return null;
}
功能移动炸弹(事件:事件)
{
var aBomb:常规炸弹;

if(Math.random()它能工作!!实际上这只是一个开始,对于到达的每一颗炸弹,当用户按住一个拆除按钮时,炸弹位置上的指示器将充电,当炸弹充满时,炸弹小孩将消失,炸弹小孩将从阵列中移除..而且,不仅是炸弹,我还想与危险的海洋生物进行同样的互动,例如就像鲨鱼、水母、海蛇和河豚一样,但是当潜水员击中其中一个时,潜水员的健康值将降低。我也必须这样做吗?顺便说一句,非常感谢!!@AzmiFarhan不,瞬间击中的逻辑将是不同的。一般地考虑一下。潜水员应该选择一颗炸弹,然后得到一个炸弹准备好解除它。然后,任何危险的鱼都会立即伤害潜水员,不管会有多少鱼。那么,我应该对鱼使用我以前的逻辑吗?或者我的意思是,使用相同的逻辑,只在检查find函数输出的if语句中使用不同的表达式?@AzmiFarhan,请这样做不要让我替你想。我当然可以写你想写的所有东西,但有什么意义呢?是你自己,尽可能多地尝试自己解决问题,然后你就会学到一些关于算法的知识。