在每生成这么多其他对象后,如何生成随机对象?

时间:2015-01-19 09:34:22

标签: javascript actionscript-3

我正在创造一个子弹地狱射击/小行星,我现在得到了随机小行星,但我想知道如何在每5-10颗小行星后产生一个随机敌舰,以使游戏更加细致。

我意识到我需要一个使用片段的计数器以及一个'if语句'但是我不知道该怎么做?如果可以,请帮忙。

var background = new Background;

background.x = 200;
background.y = 200;

addChild(background);

var ship = new Ship

ship.x = 125;
ship.y = 350;

addChild(ship);

var rocks = new Array(); // Create 10 rocks for  
{ 
    var rock = new Rock(); 
    rock.x = Math.random() * stage.stageWidth; 
    rock.y = 0; rocks.push( rock ); 
    addChild(rock);
}

stage.addEventListener(Event.ENTER_FRAME,stepDown);

function stepDown(event:Event)
{
   // step down each rock
   for ( var i = 0; i < 10; ++i )
   {
      rocks[i].y += 5;
       // Check if rocks fall from stage than set it on new position
      if ( stage.stageHeight < rocks[i].y )
      {
         rocks[i].y = 0;
         rocks[i].x = Math.random() * stage.stageWidth
      }
   }
}

stage.addEventListener(KeyboardEvent.KEY_DOWN, fl_PressKeyToMove);

function fl_PressKeyToMove(event:KeyboardEvent):void
{
    switch (event.keyCode)
    {
        case Keyboard.LEFT:
        {
            ship.x -= 15;
            if (ship.hitTestObject(Wall2))
            {
                ship.x +=15 ;
            }
            break;
        }
        case Keyboard.RIGHT:
        {
            ship.x += 15;
            if (ship.hitTestObject(Wall1))
            {
                ship.x -=15 ;
            }
            break;
        }
    }
}

ship.gotoAndStop("normal");

stage.addEventListener(Event.ENTER_FRAME,detectCollision);
function detectCollision(event:Event)
{
     if(ship.hitTestObject(rock))
     {
         ship.gotoAndPlay("boom");
         ship.stop();
         stage.removeEventListener(KeyboardEvent.KEY_DOWN, fl_PressKeyToMove);
     }
}

addChild(enemy);

1 个答案:

答案 0 :(得分:0)

首先,你的代码似乎是硬编码来处理10个小行星。我

function stepDown(event:Event) {
   // step down each rock
   for ( var i = 0; i < 10; ++i )

您必须将其更改为:

function stepDown(event:Event) {
   // step down each rock
   for ( var i = 0; i < rocks.length; ++i )

在你的stepDown中你可能还需要遍历所有敌舰,所以添加到这个方法:

   for (var i = 0; i < enemyShips.length; ++i) 

因为你想要更新敌舰的位置

在您发布的代码中,我没有看到创建新岩石的方法(我看到了可能用于它的{}块。

要做下一个spawn,你需要调用方法。 在你的游戏循环中,当你决定是时候进行新的生成(摇滚或发货)时,调用spawn(),如下所示

var otherMobs = new Array();
var counter = 0;
function spawn() {
    counter++;
    if (counter % 10 == 0) {
        spawnShip();
    } else {
        spawnRock();
    }
}

function spawnShip() {
    var enemyShip = new EnemyShip(); 
    enemyShip.x = Math.random() * stage.stageWidth; 
    enemyShip.y = 0; 
    otherMobs.push( enemyShip ); 
    addChild(enemyShip);    
}

function spawnRock() {
    var rock = new Rock();
    rock =.x = Math.random() * stage.stageWidth; 
    rock =.y = 0; 
    rocks.push( rock = ); 
    addChild(rock =);    
}