我是非常新的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时,我为所有阵列做了,所以我想知道我怎么能给出不同的动作,对于同一阵列的不同子弹。
答案 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;
基本上这允许每个子弹拥有它自己的特殊属性,该属性独立于该类的任何其他实例。
我希望有所帮助。