2013-04-22 75 views
0

你好我试图创建一个类似于太空入侵者的游戏,并且很难创建hitTestObject,所以如果外星人击中mc_gun,玩家会失去生命,并且一旦他失去了三个生命游戏结束后被带到一个屏幕,他/她可以输入他们的名字,将其带入高分表。AS3 hitTestObject结束游戏

我还是要做到以下几点,但不知道从哪里开始...

创建玩家将3和静物。 当所有生命都消失时结束游戏。 采取输入名称屏幕 高分表。

任何帮助将不胜感激。

这是我的文档正文编码...

stop(); 
var score:Number = 0; 
var livesLeft:Number = 3; 

var lifesArray:Array = new Array(); 
lifesArray.push(life1); 
lifesArray.push(life2); 
lifesArray.push(life3); 

addEventListener(Event.ENTER_FRAME, pulse); 

function pulse(event:Event):void 
{ 
    checkForHitOnGun(); 
    checkForHitOnAliens(); 
    checkForBulletOnBulletHit(); 
    //checkEndGameCondition 
} 

function checkForHitOnGun() 
{ 
    for (var i=0; i<numChildren; i++) 
    { 
     if (getChildAt(i) is alienbullet) 
     { 
      var mc_alienbullet:MovieClip = getChildAt(i) as MovieClip; 
      for (var j=0; j<numChildren; j++) 
      { 
       if (getChildAt(j) is gun) 
       { 
        var mc_gun:MovieClip = getChildAt(j) as MovieClip; 
        if (mc_alienbullet.hitTestObject(mc_gun)) 
        { 

        health -= 10; 
        if (health<1){ 
         if(livesLeft<1){ 
          gotoAndPlay(2); 
          removeChild(mc_gun); 
          stage.removeEventListener(Event.ENTER_FRAME,pulse); 


         } 
         livesLeft--; 
         lifesArray[livesLeft].visible = false; 

         health=100; 
         if (livesLeft == 0){ 
          (endGo); 
          gotoAndPlay(2); 
         } 
        } 
        trace("health =" +health); 
        } 
       } 
      } 
     } 
    } 
} 


function checkForHitOnAliens() 
{ 
    for (var i=0; i<numChildren; i++) 
    { 
     if (getChildAt(i) is bullet) 
     { 
      var mc_bullet:MovieClip = getChildAt(i) as MovieClip; 
      for (var j=0; j<numChildren; j++) 
      { 
       if (getChildAt(j) is alien) 
       { 
        var mc_alien:MovieClip = getChildAt(j) as MovieClip; 
        if (mc_bullet.hitTestObject(mc_alien)) 
        { 
         var tobeDestroyed:MovieClip; 
         if (mc_alien.x > mc_bullet.x) 
         { 
          tobeDestroyed = mc_alien; 
         } 
         else 
         { 
          tobeDestroyed = mc_alien; 
         } 
         var bomb_mc:explosion = new explosion(); 
         bomb_mc.x = tobeDestroyed.x; 
         bomb_mc.y = tobeDestroyed.y; 

         var addspaceship:alien = new alien(); 

         addspaceship.x = 600; 
         addspaceship.y = Math.random()*(stage.stageHeight); 

         tobeDestroyed.destroy(); 
         addChild(bomb_mc); 
         addChild(addspaceship); 
         score++; 

         return; 
        } 
       } 
       tb_score.text = "" + score; 
      } 
     } 
    } 
} 

function checkForBulletOnBulletHit() 
{ 
    for (var i=0; i<numChildren; i++) 
    { 
     if (getChildAt(i) is bullet) 
     { 
      var mc_bullet:MovieClip = getChildAt(i) as MovieClip; 
      for (var j=0; j<numChildren; j++) 
      { 
       if (getChildAt(j) is alienbullet) 
       { 
        var mc_alienbullet:MovieClip = getChildAt(j) as MovieClip; 
        if (mc_bullet.hitTestObject(mc_alienbullet)) 
        { 
         var tobeDestroyed:MovieClip; 
         if (mc_bullet.x > mc_alienbullet.x) 
         { 
          tobeDestroyed = mc_bullet; 
         } 
         else 
         { 
          tobeDestroyed = mc_alienbullet; 

         } 
         /*score++; 
         tb_score.text = "" + score;*/ 
         var bomb_mc:explosion = new explosion(); 
         bomb_mc.x = tobeDestroyed.x; 
         bomb_mc.y = tobeDestroyed.y; 

         tobeDestroyed.destroy(); 
         addChild(bomb_mc); 
         /*if (mc_bullet.hitTestObject(mc_alienbullet)) 
         { 
         score++; 
         mc_bullet.gotoAndPlay(2); 
         }*/ 
         score++; 

         return; 
        } 
        tb_score.text = "" + score; 
       } 
      } 
     } 
    } 
} 
//mc_gun would make the bullet fire only if the gun is clicked. 
//the game is to difficult so i changed it to stage. to make the whole stage the fireing area. 
stage.addEventListener(MouseEvent.CLICK, fire); 

function fire(event:MouseEvent):void 
{ 
    var bulletfire:bullet = new bullet(); 
    bulletfire.x = mc_gun.x - 20 + mc_gun.width; 
    bulletfire.y = mc_gun.y; 
    addChild(bulletfire); 
} 

mc_banner.addEventListener(MouseEvent.CLICK, startGo); 

function startGo(event:MouseEvent):void 
{ 
    mc_banner.visible = false; 
    mc_instructions.visible = false; 
    mc_highscore.visible = false; 
    mc_gun.visible = true; 
    tb_score.visible = true; 
    addEventListener(Event.ENTER_FRAME, pulse); 
    var initialspaceship:alien=new alien(); 

    initialspaceship.x = 600; 
    initialspaceship.y=Math.random()*(stage.stageHeight); 
    addChild(initialspaceship); 

} 

function endGo() 
{ 
    mc_gun.visible = false; 
    tb_score.visible = false; 
    removeEventListener(Event.ENTER_FRAME, pulse); 
    mc_banner.visible = true; 
    livesLeft--; 
    lifesArray[livesLeft].visible = false; 
} 
+0

你试过了吗?你在哪里坠落?什么是对的,哪里出了问题?请更具体地说一下你的问题,因为你的问题是广泛的... – NemoStein 2013-04-22 15:16:42

+0

@NemoStein我已经有了人生的工作是玩家获得三条生命,但是当生命全部消失时,我会用什么编码结束游戏并清除屏幕上的所有元素,然后将其带到显示输入名称的新屏幕以添加到高分表中。 – DP187 2013-04-22 15:41:22

回答

0

engGo()功能是一个负责递减的生活。
这是最好的地方检查玩家是否死了(0人生)并结束游戏。
正如我可以理解的读取您的代码,livesLeft是您存储玩家生活的地方。
刚过了lifesArray[livesLeft].visible = false;添加以下内容:

if (livesLeft <= 0) 
{ 
    defeat(); 
} 

现在你必须从游戏切换到高分。
如果你是在一个框架中的Flash工作专业,你只需要移动到一个与高分

function defeat():void 
{ 
    gotoAndStop("HighScore"); 
} 

否则(你需要做的这一切在一帧),你需要清除阶段并在其上添加新的东西。

function defeat():void 
{ 
    // First, remove ALL listeners 
    removeEventListener(Event.ENTER_FRAME, pulse); 
    stage.removeEventListener(MouseEvent.CLICK, fire); 

    // Then, we remove everything 
    removeChild(...); 

    // Finally, you add the new stuff 
    addChild(...); 
} 

如果你使用第二个方法去,我建议你去耦的功能和类包装他们,所以你的游戏逻辑将全部在一个地方(一个班),你的高分数屏幕将在另一个,你可以轻松地交换。

+0

我编辑了代码来显示我的生活,但我认为这是不正确的?你说要在endGo中添加lifes部分,我该怎么做...?我真的很感激你的帮助 – DP187 2013-04-22 16:40:50

+0

你能帮我创造生活吗?我了解功能失败,但无法弄清楚如何创建人生 – DP187 2013-04-22 18:33:35

+0

@ DP187,你是什么意思“创造生活”? – NemoStein 2013-04-22 19:55:50