2014-10-20 77 views
0

我目前正在製作一款flash遊戲,並且對於AS 3或flash來說相當新穎。需要一些關於如何實現我的遊戲核心元素的建議。碰撞檢測 - 如何?

這個想法是2人競爭的蛇風格的遊戲,只有玩家不會試圖互相殺戮,但是試圖達到他們的對手的產卵點。

遊戲的關鍵部分之一將是一個網格,創建在舞臺上,任何玩家都可以通過穿過網格上的點來「創建牆壁」。我不知道如何實現這一點。目前我的基本情況是有兩名球員出發,如果任何一名球員到達另一名球員的起跑區,他們將得分。

我需要如何去實現這個功能的一些建議:

網格中的每個點都會在一定的狀態開始,當玩家通過這一點,這將是「激活」。然後玩家可以通過任何相鄰的點移動到「激活」點,這將在兩個活動點之間產生一堵牆,並且這就是他們將如何創建迷宮來保護他們的起始區域。

我應該單獨生成每個點或創建一個簡單的函數網格:

//function to create grids on the map 
    public function createGrid() 
    { 
     var rows:int = 6; 
     var cols:int = 11; 
     for (var py:int = 0; py < rows; py++) { 
      for (var px:int = 0; px < cols; px++) { 
       this.grid = new griDot(player1,player2, this); 
       grid.x = 50 + grid.width + 100 * px +10; 
       grid.y = 50 + grid.height +100 * py + 10; 
       this.addChild(grid); 
       } 
     } 
    } 

,他們正在使用此功能檢測(不要笑我很小白):

public function checkDotCollision(player) 
    { 

     if(player1.hitTestObject(grid) == true) 
     { 
      trace("player dot collision detected"); 
     } 
     if(player2.hitTestObject(grid) == true) 
     { 
      trace("player dot collision detected"); 
     } 
    } 

目前只有網格最左下方的廣場正在檢測玩家。任何關於如何實現這個功能的幫助/建議將不勝感激。

回答

0

我不會爲您提供代碼,只是一個想法。

在你的播放器類(如果你沒有一個,你可以逃脫動畫屬性的動畫片段,但它不是很乾淨),添加lastTouchedGriDot類型griDot

checkDotCollision中,檢查每個圖塊。你目前無法做到這一點;看起來你必須在某個地方維護一個集合griDot。因此,請改變createGrid()以將創建的對象存儲在一組排序中。然後我們可以檢查每個瓷磚。所以這樣做。如果您發現一擊,做到以下幾點:

  • 如果沒有最後一個接觸的網格點,設置的最後一個觸摸網格點到你現在碰到一個。
  • 如果上次觸摸的網格點與您現在觸摸的網格點相同,則不執行任何操作。
  • 如果上次觸摸的網格點與您現在觸摸的網格點不同,請檢查它是否相鄰。如果是這樣,建一堵牆。如果沒有,請將最後觸摸的網格點設置爲您正在觸摸的網格點。

這應該爲您提供一個堅實的開始。你必須添加牆壁碰撞並檢查是否已經有牆壁。