如何在一个阵列上给出子弹的不同方向?

时间:2016-06-22 04:02:26

标签: actionscript-3

我是非常新的javascript,我正在做一个游戏,你必须杀死一些小行星,当你在屏幕上采取一些不同的“对象”,我们扩大我们的子弹数量。哎呀,当你拿到不同的物体时,我可以在屏幕上获得3个子弹,但是现在我想给阵列中不同方向的3个子弹中的2个。当我尝试时,我有问题,我给了3个子弹相同的方向,我知道为什么但我至少5小时试图修复这个,我不能。

我使用不同的类在Flash Builder 4.7上进行编程,我将给出main中的数组代码,以及bullet类,以及英雄类。

主阵列

public function evUpdateBullet():void//here execute update of my class Bullets
    {
        var i:int;
        for(i=myBullets.length-1; i >= 0; i--)
        {
            if(myBullets != null) //to be ?
            {
                if(myBullets[i].isDestroyed) //is destroyed Bullets?
                {
                    myBullets[i] = null;
                    myBullets.splice(i, 1); //deleted elements.
                }else
                {

                    myBullets[i].evUpdate();





                }
            }
        }
    }

这里我推送数组并创建子弹,记住myBullets是数组的名称。

public function evShoot(posX:int, posY:int):void//here create the bullet and push in the array
    {
        attack1 = new Bullet;
        attack1.Spawn(posX, posY);
        myBullets.push(attack1);

}

这里我展示了英雄代码,我定义子弹的位置将在屏幕上产生。

if (isPressing_Shoot && !isDestroyed)// Here execute the event shoot without power
        {
            Main.instace.evShoot(model.x, model.y);


            isPressing_Shoot = false;
            canShoot = false;

        }


        evDestroyed();
    }

这是Bullet类的代码

首先产生

public function Spawn(posX:int, posY:int):void
    {
        isDestroyed = false;//first parameter of my bullet

        model = new MCbullet;
        Main.layer1.addChild(model);//painting the hero in the stage
        model.x = posX;//position in the stage wiht the hero
        model.y = posY;
        model.tigger.visible = false;

    }

然后更新

public function evUpdate():void//here conect with update general
    {
        if (model != null)//to be?
        {

            model.y -= 12;//move of my bullet
            //model.x -= 12;





            if (model.y <= 0 )
            {
                evDestroyed();
            }
        }

    }

在这次更新中我设置了y的移动,所以我可以垂直拍摄,但是..当我尝试添加一个x.move时,我为所有阵列做了,所以我想知道我怎么能给出不同的动作,对于同一阵列的不同子弹。

1 个答案:

答案 0 :(得分:0)

遍历数组元素。有几种方法可以做到这一点,但我最习惯使用的方法是for循环。它看起来像这样:

// loop through myBullets array to update 
// each x and y position dependent on unique 
// property value _xSpeed and _ySpeed.
for (var i:int = 0; i < myBullets.length; i++) 
{
    myBullets[i].x += myBullets[i]._xSpeed;
    myBullets[i].y += myBullets[i]._ySpeed;
}

显然,您需要将数组元素的_xSpeed_ySpeed属性设置为动态值。您首先需要为子弹类赋予这些属性,然后在实例化项目符号时设置它们的值。这可能看起来像这样:

function makeBullet():void{
    var b:Bullet = new Bullet();
    b.x = hero.x;
    b.y = hero.y;
    b._xSpeed = hero._xSpeed; // or put here whatever makes sense for assigning the right value in your application

在你的子弹类构造函数中,在function之前但在class括号内,添加属性:

var _xSpeed:Number = 0;
var _ySpeed:Number = 0;

基本上这允许每个子弹拥有它自己的特殊属性,该属性独立于该类的任何其他实例。

我希望有所帮助。