3

我的 Actionscript 代码一直有问题。我对 Flash 和 AS3 还很陌生,所以如果我的代码看起来很粗糙或简陋,我深表歉意,但我正在尽我所能做到这一点。

好吧,在这个项目中,我试图让一颗子弹从墙上弹射一次。如果它在弹跳后再次撞到墙上,子弹就会消失。

我创建了一个在数组中移动子弹的 for 循环。同时,我尝试记录每颗子弹的弹跳次数。当我射出第一颗子弹时,这很好用——它会弹跳,然后在撞到另一面墙后消失。然而,在那之后我发射的每一颗子弹都会在它击中的第一面墙上消失,然后再弹跳。我试图让它工作,但我似乎做不到。

如果有人可以向我展示问题或建议更改我的代码,我将不胜感激。 这是我现在的代码的链接。

谢谢,任何帮助的人。

4

2 回答 2

1

以下是我的一些建议:

1:创建一个Bullet类来跟踪自己与墙壁的碰撞。我也会将该clearBullet()方法移到子弹类本身中。

public class Bullet extends Sprite
{

    public var collisions:int = 0;
    public var xv:Number = 0;
    public var yv:Number = 0;


    public function clear():void
    {
        if(parent)
            parent.removeChild(this);
    }

}

2:更新你的循环来处理这个新信息。

for each(var i:Bullet in bulletholder)
{
    // Move bullet.
    // Check for collision.

    // When there is a collision, do this:
    i.collisions ++;

    if(i.collisions >= 2)
    {
        var n:int = bulletholder.indexOf(i);
        bulletholder.splice(n, 1);

        i.clear();
    }
    else
    {
        // Deal with changing bullet position.
    }
}
于 2012-02-28T06:09:42.010 回答
1

我发现您的代码至少有几个问题:

  1. ricochetcount的明显不同步。即,您还需要从该数组中删除一个元素。
  2. 当您从数组中删除一个元素时bulletholder(通过clearBullet),您仍在递增i,这意味着您最终会无意中跳过一个元素。

另外我不确定你为什么需要clearBullet(). 您已经i在主循环中拥有索引以及对项目符号对象的引用。

于 2012-02-28T11:08:13.367 回答