2014-06-12 27 views
0

我正在製作這個遊戲,我想檢測我的子彈和我的食物之間的碰撞。 我不明白我怎麼能讓我的食物對我的子彈產生反應,並且讓它得分。檢測我的子彈和食物之間的碰撞

有人可以向我解釋如何做到這一點或在某些方向指向我。

stop(); 

import flash.events.MouseEvent; 

// maak nieuw kanon aan 
var Player:player = new player(); 

// set de coordinaten van het kanon 
Player.x = 425; 
Player.y = 540; 

// creeer het kanon 
addChild(Player); 

var score = 0; 
score_txt.text = score; 


//functie pijltjes besturing 
stage.addEventListener(KeyboardEvent.KEY_DOWN,reportKeyDown); 
function reportKeyDown(event:KeyboardEvent):void 
{ 
var i:int; 
var options_num:int = 3; 

// coordinaten pijltje naar links 
if(event.keyCode == 37) 
{ 
    Player.x -= 50 
} 
// coordinaten pijltje naar rechts 
if(event.keyCode == 39) 
{ 
    Player.x += 50 
} 
// coordinaten pijltje naar rechts 
if(event.keyCode == 32) 
{ 
    shoot() 
} 

// gooi random het eten door de lucht :) 
i = Math.round(Math.random() * (options_num-1) + 1); 
if(i == 1) 
{ 
    eten() 
} 
} 

// vork schieten 
function shoot(e:Event = null):void { 
// maak nieuw vork aan 
var Bullet:bullet = new bullet(); 

// zet coordinaten van de vork hetzelfde als het kanon 
Bullet.x = Player.x+6; 
Bullet.y = Player.y-20; 

// creeer de vork 
addChild(Bullet); 
Bullet.addEventListener(Event.ENTER_FRAME, function(e:Event):void { 
    // laat fork bewegen 
    movebullet(e) 

}) 
} 
// snelheid schieten vork 
function movebullet(e:Event):void { 
e.target.y -= 60; 
if(e.target.y <= 50) { 
    e.target.removeEventListener(e.type, movebullet); 
} 
} 

// eten schieten 
function eten(e:Event = null):void { 
// maak nieuw vork aan 
var foodArray = new Array(kip, hamburger, pizza, patat, ijs); 
var nummer = Math.floor(Math.random() * foodArray.length); 
var Eten:MovieClip = new foodArray[nummer]; 

// coordinaten van het eten 
Eten.x = 750; 
Eten.y = randomMinMax(30, 70); 

// creeer eten 
addChild(Eten); 
Eten.addEventListener(Event.ENTER_FRAME, function(e:Event):void { 
    // laat fork bewegen 
    gooieten(e) 
}) 
} 
// snelheid schieten eten 
function gooieten(e:Event):void { 
e.target.x -= 20; 
e.target.y += 0; 
if(e.target.x <= 50) { 
    e.target.removeEventListener(e.type, gooieten); 
} 
} 



// random getallen creeren (gebruikt bij schieten van verschillende soorten eten) 
function randomMinMax(min:Number, max:Number):Number 
{ 
return min + (max - min) * Math.random(); 
} 

回答

0

您正在查找的功能是hitTestObject()。但是,這將需要對代碼進行一些修改。

我們需要一種方法來引用我們的子彈和食物後,我們已經創建它們。爲此,我們將製作容器foodContainerbulletContainer。這些將分別持有所有食物和子彈。

import flash.display.Sprite 

var foodContainer:Sprite = new Sprite() 
var bulletContainer:Sprite = new Sprite() 
addChild(foodContainer) 
addChild(bulletContainer) 

我們總是對這些容器有一個可靠的參考,我們可以隨時訪問它們。現在,無論何時製作新的子彈或食物,我們都會將它添加到容器中,而不是將其添加到舞臺上。

function shoot(e:Event = null):void { 
    // make new bullet 
    var Bullet:bullet = new bullet(); 

    //set bullet coordinates 
    Bullet.x = Player.x+6; 
    Bullet.y = Player.y-20; 

    // add the bullet TO THE BULLETCONTAINER 
    bulletContainer.addChild(Bullet); 
} 

(我已經改變了這個英文)

function addFood(e:Event = null):void 
{ 
    //make new food 
    var foodArray = new Array(kip,hamburger,pizza,patat,ijs); 
    var randomNumber = Math.floor(Math.random() * foodArray.length); 
    var food:MovieClip = new foodArray[randomNumber]; 

    // set coordinate of food 
    food.x = 750; 
    food.y = randomMinMax(30,70); 

    // add the food TO THE FOODCONTAINER 
    foodContainer.addChild(food); 
} 

好了,我們都存儲到三件事情我們資產的; bulletContainerfoodContainerstage(其中包含您的播放器)。 現在我們可以在foodContainer成立了衝突處理

addEventListener(Event.ENTER_FRAME,testCollision) 

function testCollision(e:Event = null) { 
    //for each bullet in the bulletContainer... 
    for (var i=0;i<=bulletContainer.numChildren-1;i++) { 
     //and for each food in the foodContainer... 
     for (var j=0;i<=foodContainer.numChildren-1;j++) { 
      //we use getChildAt() to reference each child 
      //(a bullet is a child of the bulletContainer; you get the idea) 
      var targetBullet = bulletContainer.getChildAt(i) 
      var targetFood = foodContainer.getChildAt(j) 
      //heres the magic statement, hitTestObject() 
      if (targetBullet.hitTestObject(targetFood) { 
       //do some action to increase the score 
      } 
     } 
    } 
} 

在上面的代碼,每一個子彈在bulletContainer,我們將循環每一樣食物,並檢查它們是否接觸或不。 然後,我們做任何你想要的分數,我們完成了!

但是,使用hitTestObject()有一些缺點。這個頁面解釋了爲什麼。 http://code.tutsplus.com/tutorials/quick-tip-collision-detection-between-circles--active-10523