ActionScript 3:子弹跳弹

3
我遇到了Actionscript代码的问题。我对Flash和AS3还比较陌生,所以如果我的代码看起来很粗糙或基础,我表示歉意,但我正在尽力做得最好。
在这个项目中,我试图让子弹在墙上反弹一次。如果它在反弹后再次撞到墙壁,子弹将消失。
我创建了一个for循环来移动数组中的子弹。同时,我尝试跟踪每个子弹的反弹次数。当我发射第一颗子弹时,这个方法可以很好地工作——它会反弹并在撞到另一堵墙后消失。然而,之后我发射的每颗子弹都会在撞到第一堵墙之前消失,而没有反弹。我试过让它正常工作,但我似乎无法做到。
如果有人能指出问题或建议我的代码更改,我将不胜感激。 这是我的当前代码链接。 谢谢任何帮助的人。

接受游戏开发标签更改以获得更多帮助。 - dejjub-AIS
谢谢您的建议。我会这样做的。 - Lucas
我建议创建一个“子弹”类,它保存有关其撞击墙壁次数的信息,以便您可以更轻松地处理信息。 - Marty
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.
    }
}

1
我看到你的代码中至少有几个问题:
  1. 你的ricochetcount明显是不同步的,也就是说你需要从数组中删除一个元素。
  2. 当你从bulletholder数组中删除一个元素(通过clearBullet),你仍然在增加i的值,这意味着你无意中跳过了一个元素。
此外,我不确定为什么你需要clearBullet()函数。在主循环中,你已经有了索引i以及子弹对象的引用。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接