我正在as3中制作一个侧滚动游戏,其中玩家产生的单位会自动走向屏幕另一侧的出口,但有塔停止它们。我想塔楼分开拍摄,有什么办法吗? 这是我的代码,一旦if语句满足所有塔同时开火。
private function tower1Fire():void
{
for (var j:int = creep1Array.length - 1; j >= 0; j--)
{
for each (var towerOne:mcTower1 in tower1Array)
{
if (creep1Array[j].x - towerOne.x <= 100 && creep1Array[j].y > towerOne.y)
{
var newTower1Bullet:mcLaser1 = new mcLaser1;
newTower1Bullet.x = towerOne.x;
newTower1Bullet.y = towerOne.y;
tower1BulletArray.push(newTower1Bullet);
stage.addChild(newTower1Bullet);
}
}
}
}
我在屏幕上有3个塔,使用此代码添加:
var tower1New1:MovieClip = new mcTower1;
tower1New1.x = 313;
tower1New1.y = 340;
tower1Array.push(tower1New1);
MovieClip(root).addChild(tower1New1);
我没有收到任何错误。任何回复将不胜感激,谢谢!
答案 0 :(得分:1)
据我所知,你所有的塔都将在一个'帧渲染'中“射击”,这就是为什么它们看起来都是一次性射击。 (因为你的整个循环将在一次绘制操作中执行)
如果我是你,我会听取ENTER_FRAME事件,并保持帧的数量....我只会发射一个塔,一次非常10-20帧。所以......
private ENTER_FRAME(event:Event):void
{
if(frameCount >= 20)
{
// TODO: fire logic goes here
// reset the frameCount to zero
frameCount = 0;
// you need to keep a running index of your towers,
// so the next time your code executes, it will fire the next tower
towerIndex++
}
frameCount++;
}
所以,如果我们这样做,你就不会有for循环。