2011-03-16 30 views
0

我正在爲一個班級製作一個簡單的flash遊戲。我想要讓一個等級爲2,但似乎無法讓敵人獨立爆炸。我製作了實例名稱相同的enemy2,enemy3,enemy4和enemy5符號。以防萬一,我也做了一個單獨的球員。下面的代碼是在播放器的框架上。任何建議將不勝感激。有多個敵人並且被導彈擊中的問題

onClipEvent(load) { 
    var shipSpeed:Number = 15; 
    var rotationSpeed:Number = 15; 
    var missileNum:Number = 0; 
    var missile:Array = new Array(); 
    var missleSpeed:Number = 20; 
} 



onClipEvent (enterFrame) { 
if(Key.isDown(Key.LEFT)) { 
    _rotation -= shipSpeed; 
} 

if(Key.isDown(Key.RIGHT)) { 
    _rotation += shipSpeed; 
} 

var radian:Number = (-1 * _rotation + 90) * Math.PI/180; 

if(Key.isDown(Key.UP)) { 
    _x += shipSpeed * Math.cos(radian); 
    _y -= shipSpeed * Math.sin(radian); 
} 

if(Key.isDown(Key.DOWN)) { 
    _x -= shipSpeed * Math.cos(radian); 
    _y += shipSpeed * Math.sin(radian); 
} 


// keeps player in the frame  
if(this._x >= 800) this._x = 11; 
if(this._x <= 10) this._x = 799; 
if(this._y >= 600) this._y = 11; 
if(this._y <= 10) this._y = 599; 




if(this.hitTest(_root.enemy2)) 
{ 
    _root.player2.play(); 
} 

if(this.hitTest(_root.enemy3)) 
{ 
    _root.player2.play(); 
} 

if(this.hitTest(_root.enemy4)) 
{ 
    _root.player2.play(); 
} 

if(this.hitTest(_root.enemy5)) 
{ 
    _root.player2.play(); 
} 

//Shoot missile in direction the ship is facing 
if(Key.isDown(Key.SPACE)) { 
    missile[missileNum] = _root.attachMovie("missile","missile"+missileNum,_root.getNextHighestDepth(),{_x:_x,_y:_y,_rotation:_rotation}); 
    missile[missileNum].ySpeed = Math.sin(radian)*missleSpeed; 
    missile[missileNum].xSpeed = Math.cos(radian)*missleSpeed; 
    missile[missileNum].onEnterFrame = function() { 
     if(this.hitTest(_root.enemy2)) { 
      _root.enemy2.play();} 


     if(this.hitTest(_root.enemy3)) { 
      _root.enemy3.play();} 

    if(this.hitTest(_root.enemy4)) { 
     _root.enemy4.play();} 

    if(this.hitTest(_root.enemy5)) { 
     _root.enemy5.play();} 

      // this.attachMovie("enemy", "enemy", 3); 
     } 
     this._y -= this.ySpeed; 
     this._x += this.xSpeed; 
     trace("missile: " + missileNum); 
     if(0 > this._x || this._x > 800 || 0 > this._y || this._y > 600) 
      this.removeMovieClip(); 
    } 
    missileNum++; 
} 
} 
+0

什麼是你的問題是什麼呢? – alxx 2011-03-16 13:27:49

+0

我的導彈不會離開玩家所在的區域,無論我在哪裏拍攝,它都是它所在的地方。 – bissm 2011-03-16 16:40:04

回答

0

你絕對需要學習如何正確縮進你的代碼。正如你所看到的那樣,它不僅會導致混淆,還會導致很多錯誤。

的問題是,代碼

this._y -= this.ySpeed; 
    this._x += this.xSpeed; 
    trace("missile: " + missileNum); 
    if(0 > this._x || this._x > 800 || 0 > this._y || this._y > 600) 
     this.removeMovieClip(); 

這部分不是導彈的onEnterFrame事件偵聽器內。移動下面的代碼中的流浪}大括號。也潛missleNum++部分上述1托架

換句話說,變換此:

 // this.attachMovie("enemy", "enemy", 3); 
    } 
    this._y -= this.ySpeed; 
    this._x += this.xSpeed; 
    trace("missile: " + missileNum); 
    if(0 > this._x || this._x > 800 || 0 > this._y || this._y > 600) 
     this.removeMovieClip(); 
} 
missileNum++; 

成這樣:

 // this.attachMovie("enemy", "enemy", 3); 
    this._y -= this.ySpeed; 
    this._x += this.xSpeed; 
    trace("missile: " + missileNum); 
    if(0 > this._x || this._x > 800 || 0 > this._y || this._y > 600) 
     this.removeMovieClip(); 

    } 

missileNum++; 
} 

也,似乎你提供的代碼包含2不必要/未使用代碼末尾的}括號。

讓我給你充分,適當的縮進「導彈」的一部分:

if(Key.isDown(Key.SPACE)) { 
    missile[missileNum] = _root.attachMovie("missile","missile"+missileNum,_root.getNextHighestDepth(),{_x:_x,_y:_y,_rotation:_rotation}); 
    missile[missileNum].ySpeed = Math.sin(radian)*missleSpeed; 
    missile[missileNum].xSpeed = Math.cos(radian)*missleSpeed; 

    missile[missileNum].onEnterFrame = function() { 
     if(this.hitTest(_root.enemy2)) { 
     _root.enemy2.play();} 

     if(this.hitTest(_root.enemy3)) { 
     _root.enemy3.play();} 

     if(this.hitTest(_root.enemy4)) { 
     _root.enemy4.play();} 

     if(this.hitTest(_root.enemy5)) { 
      _root.enemy5.play();} 

     // this.attachMovie("enemy", "enemy", 3); 

     this._y -= this.ySpeed; 
     this._x += this.xSpeed; 
     trace("missile: " + missileNum); 
     if(0 > this._x || this._x > 800 || 0 > this._y || this._y > 600) 
      this.removeMovieClip(); 
    }//end of the missle's onEnterFrame 

    missileNum++; 
}//end of the Key.isDown 

另一個建議,我本來就是移動你的敵人在一個陣列,讓我們說在開始的「敵人」

var enemies:Array = new Array(); //initiate them now or later 

那麼你可能會推敵人,就像你與飛彈 enemies.push(_root.some_newly_created_enemy)做;

,然後做

foreach(enemy in enemies){ 
    if(this.hitTest(enemy)) { 
    enemy.play();} 
} 

而不是檢查他們靜態逐一