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

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

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

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

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

感谢任何提供帮助的人。

【问题讨论】:

  • 接受游戏开发标签更改以获得更多帮助
  • 感谢您的建议。我会这样做的。
  • 我建议创建一个 Bullet 类,其中包含有关它撞墙次数的信息,以便您可以更轻松地处理您的信息。

标签: actionscript-3 actionscript physics 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】:

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

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

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

    【讨论】:

      猜你喜欢
      • 2013-05-23
      • 1970-01-01
      • 2017-01-26
      • 2012-03-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-08-10
      相关资源
      最近更新 更多