0

我正在尝试使用数组的新事物并且遇到了一些困难。我正在尝试创建 1 个类的多个实例并将它们放入一个数组中。

我正在创建这样的实例:

public function creatingitem(e:TimerEvent)
    {
    amtcreated = Math.ceil(Math.random() * 4);
    while (amtcreated >= 1)
            {
                amtcreated--;
                var i:Number = Math.ceil(Math.random() * 3);
                switch (i)
                {
                    case 1 :
                        //Object1
                        objectnum = 1;
                        objectwei = 3;
                        r = new Board(objectnum,objectwei,stagw,stagh);
                        addChild(r);
                        fallingitem.push(r);
                        break;
                    case 2 :
                        //Object2
                        objectnum = 2;
                        objectwei = 4;
                        c = new Board(objectnum,objectwei,stagw,stagh);
                        addChild(c);
                        fallingitem.push(c);
                        break;
                    case 3 :
                        //Object3
                        objectnum = 3;
                        objectwei = 4;
                        l = new Board(objectnum,objectwei,stagw,stagh);
                        addChild(l);
                        fallingitem.push(l);
                        break;
                    default :
                        break;
                }
            }
}

一旦这些被创建,他们会检查它们是否与主球发生碰撞:

        public function hitcheck(e:Event)
    {
        for (var v:int = fallingitem.length - 1; v >= 0; v--)
        {
            if (ball.hitTestObject(fallingitem[v]))
            {
                                 trace(fallingitem[v]);
                if (fallingitem[v] == r)
                {
                    bonusscore +=  100;
                    fallingitem[v].removeitem();
                }
                else if (fallingitem[v] == c)
                {
                    bonusscore +=  75;
                    fallingitem[v].removeitem();
                }
                else if (fallingitem[v] == l)
                {
                    bonusscore +=  75;
                    fallingitem[v].removeitem();
                }

trace(bonusscore);
            }
        }
    }

问题是我看到每个项目都因跟踪功能而受到打击。并非所有实例都满足 if 条件。例如,我可以有 2 个“r”实例,当我同时击中 1 时,将通过并添加到分数中,而另一个将继续过去。紧随 hitTestObject 之后的跟踪显示两者都被击中和注册,但我不确定它为什么不添加分数。

谢谢,

4

1 回答 1

0

你不能真的有2个r实例。当您创建实例时,如果您碰巧创建了 2 r,则第二条r = new Board...语句会覆盖引用,并且变量r引用的是第二条。这两个对象仍然存在,但变量只能引用其中一个,因此当您执行检查时,您将忽略以前设置r但不再存在的对象。

要解决此问题,您可以将r,cl转换为Arrays ,并且每当您创建实例时,将其添加到适当的数组中。然后,您将使用 执行检查,如果对象在数组中(r.indexOf(fallingitem[v]) != -1),则返回。true

另一种方法是根据提供的代码检查objectnum构造函数中设置的任何值,因为您是根据它是否在 r、c 或 l 类别中设置该值。但是,如果该属性是私有的或可能会更改,这将不起作用。

于 2012-06-15T13:17:04.213 回答