2014-02-10 33 views
0

我需要一些幫助,我不能做碰撞,因爲它的「未定義」我想我需要做和數組來檢查它,但我需要幫助做它從未做過它之前:/ 有一些這裏的困難一些嘗試,但陣列沒有成功,在新的JavaScript需要幫助,高度讚賞人誰幫助數組as3碰撞幫助編碼

/* Código que pára a timeline na 1 frame para que o menu continue apresentado*/ 
stop(); 
/*Movimenta a nave fazendo a seguir os movimentos do rato e esconde o cursor do sistema operacional*/ 

stage.addChild(arma_tiro); 
arma_tiro.mouseEnabled = false; 
arma_tiro.addEventListener(Event.ENTER_FRAME, fl_CustomMouseCursor); 

function fl_CustomMouseCursor(event:Event) 
{ 
    arma_tiro.x = stage.mouseX; 
} 
Mouse.hide(); 


/* Mouse Click Event 
Clicking on the specified symbol instance executes a function in which you can add your own custom code. 

Instructions: 
1. Add your custom code on a new line after the line that says "// Start your custom code" below. 
The code will execute when the symbol instance is clicked. 
*/ 

stage.addEventListener(MouseEvent.CLICK, fl_MouseClickHandler_3); 

function fl_MouseClickHandler_3(event:MouseEvent):void 
{ 


    var bullet:bullet_ = new bullet_(); 
    addChild(bullet); 
    bullet.x=arma_tiro.x; 
    bullet.y=arma_tiro.y; 
    bullet.addEventListener(Event.ENTER_FRAME, moverbala); 

} 

function moverbala(event:Event):void // função para mover a bala para cima */ 
{ 
    event.target.y=event.target.y-20; 
} 

//stage.addEventListener(Event.ENTER_FRAME, Primeira); 

setInterval(Primeira, 1000) ; //define intervalo de tempo entre as varias repetiçoes da funçao 
function Primeira(){ //funçao de spawn de nave 1 

    var invader1:invader_1 = new invader_1(); 
    addChild(invader1); 
    invader1.x=0; 
    invader1.y=15; 
    invader1.addEventListener(Event.ENTER_FRAME, mover1); 
} 

function mover1(event:Event):void // função para mover a nave para lado direito */ 
{ 
    event.target.x+=10; 
} 

//Nave 2 

setInterval(Segunda, 1000) ; //define intervalo de tempo entre as varias repetiçoes da funçao 
function Segunda(){ //funçao de spawn de nave 1 

    var invader2:invader_2 = new invader_2(); 
    addChild(invader2); 
    invader2.x=0; 
    invader2.y=45; 
    invader2.addEventListener(Event.ENTER_FRAME, mover2); 
} 

function mover2(event:Event):void // função para mover a nave para lado direito */ 
{ 
    event.target.x+=10; 
} 

//Nave 3 

setInterval(Terceira, 1000) ; //define intervalo de tempo entre as varias repetiçoes da funçao 
function Terceira(){ //funçao de spawn de nave 1 

    var invader3:invader_3 = new invader_3(); 
    addChild(invader3); 
    invader3.x=0; 
    invader3.y=85; 
    invader3.addEventListener(Event.ENTER_FRAME, mover3); 
} 

function mover3(event:Event):void // função para mover a nave para lado direito */ 
{ 
    event.target.x+=10; 
} 

if (bullet.hitTestObject(invader1)) 
     { 
      //Remove bullet and enemy 
      removeChild(bullet); 
      removeChild(invader1); 

     } 

回答

1

似乎bullet_是一類,而不是一個實例,所以你大炮調用hitTestObject就可以了。也許嘗試用bullet替換bullet_。

有很多解決方案可以做到這一點,但對我來說最簡單的做法是保持2個陣列,一個用於子彈,一個用於敵人。

所以加陣列:

// create the array for the bullets 
bullets :Array = []; 
// create the array for the enemies 
enemies :Array = []; 

添加onEnterFrame事件監聽器做的每一幀的測試和遊戲邏輯:

addEventListener(Event.ENTER_FRAME, _gameLoop); 

變化的函數來創建子彈和敵人:

function fl_MouseClickHandler_3(event:MouseEvent):void 
{ 
    // create the bullet 
    var bullet:bullet_ = new bullet_(); 
    addChild(bullet); 
    bullet.x=arma_tiro.x; 
    bullet.y=arma_tiro.y; 

    // add the bullet to the bullets array 
    bullets.push(bullet); 
} 

function Primeira():void 
{ 
    var invader1:invader_1 = new invader_1(); 
    addChild(invader1); 
    invader1.x=0; 
    invader1.y=15; 

    enemies.push(invader1); 
} 

function Segunda():void 
{ 
    var invader2:invader_2 = new invader_2(); 
    addChild(invader2); 
    invader2.x=0; 
    invader2.y=45; 

    enemies.push(invader2); 
} 

function Terceira():void 
{ 
    var invader3:invader_3 = new invader_3(); 
    addChild(invader3); 
    invader3.x=0; 
    invader3.y=85; 

    enemies.push(invader3); 
} 

現在創建遊戲循環功能:

function _gameLoop(e:Event):void 
{ 
    var firstLoop:Boolean = true; 

    // loop to move/remove the bullets 
    for(var a:int = bullets.length-1; a>=0; a--) 
    { 
     bullets[a].y -= 20; 
     // if the bullet is not on screen anymore, remove it from array 
     if(bullets[j].y < 0) 
     { 
      removeChild(bullet[a]); 
      bullets.splice(a,1); 
      continue; 
     } 
    } 

    // loop enemies 
    for(var i:int = enemies.length-1; i>=0; i--) 
    { 
     // move the enemy 
     enemies[i].x += 10; 
     // loop the bullets to see if on collide the enemy 
     for(var j:int = bullets.length-1; j>=0; j--) 
     { 
      // test collision with the enemy 
      if(enemies[i].hitTestObject(bullets[j]) 
      { 
       // make your enemy dead 
       removeChild(enemies[i]); 
       // remove it from the array 
       enemies.splice(i,1); 
      } 
     } 
    } 
} 

希望這可以幫助你

+0

照你說我現在最後一個錯誤:引發ArgumentError:錯誤#1063:參數數量不匹配上flashproject_fla :: MainTimeline/_gameLoop()。預計0,得到1. –

+0

啊對不起,忘了補充e:事件,我編輯帖子 –

+0

沒事我發現很多:D –