ActionScript 3:子弹弹跳

Posted

技术标签:

【中文标题】ActionScript 3:子弹弹跳【英文标题】:ActionScript 3: Bullet Ricocheting 【发布时间】:2012-03-17 14:42:13 【问题描述】:

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

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

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

如果有人能告诉我问题,或者建议更改我的代码,我将不胜感激。 Here is a link to my code as it is now.

感谢任何提供帮助的人。

【问题讨论】:

接受游戏开发标签更改以获得更多帮助 感谢您的建议。我会这样做的。 我建议创建一个 Bullet 类,其中包含有关它撞墙次数的信息,以便您可以更轻松地处理您的信息。 【参考方案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.
    

【讨论】:

【参考方案2】:

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

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

我也不确定你为什么需要clearBullet()。您已经在主循环中拥有了索引i 以及对子弹对象的引用。

【讨论】:

以上是关于ActionScript 3:子弹弹跳的主要内容,如果未能解决你的问题,请参考以下文章

如何在python中计算带有2个弹跳的子弹行进的总距离

如何使子弹移动 Actionscript 3.0

ActionScript 3 测试Action Script中是否存在类方法

在 Actionscript 3.0 中删除子级

Action Script 3 NumericStepper 验证空值

Action Script 3. 角色移动时改变动画