2014-01-11 38 views
1

我的腳本有問題。我所擁有的是使用2維數組製作的平鋪地圖,它使用不同的數字指定不同的瓦片類型,並在容器div元素中繪製。我也有一個可移動的角色div元素。我的問題是我無法弄清楚如何檢測瓷磚並利用所述檢測結果來確定角色是否可以移動到附近的瓷磚中。二維陣列瓦片圖碰撞檢測情況。

我有這個託管的關聯網站如下;

http://brandynssite.webs.com/map_tile.html

正如你可以與該例子中看到有繪製平鋪圖,即開始於0,0的字符元素的容器,並有用於檢查字符位置和瓦片類型兩個按鈕。我想要發生的事情是代碼檢測到按鍵事件發生后角色正在前往的區塊,並在可能的情況下移動它們。我需要什麼樣的功能,是他們的一套特定的算法,我需要的東西和我在該網站上所擁有的一樣簡單。

我已經提供了允許角色移動的功能之一,因爲它似乎是我可以想到的可能的碰撞檢測中最相關的功能。

function anim(e) { 

if(e.keyCode==39){ 
     character_left += 10; 
     x += 1; 
     playerPos=mapArray[y][x]; 


     character.style.left = character_left + "px"; 
     if(character_left >= 190){ 
      character_left -= 10; 
      x -= 1; 
      playerPos=mapArray[y][x]; 

      } 
     } 
if(e.keyCode==37){ 
     character_left -= 10; 
     x -= 1; 
     playerPos=mapArray[y][x]; 
     character.style.left = character_left + "px"; 
     if(character_left <= 0){ 
      character_left += 10; 
      x += 1; 
      playerPos=mapArray[y][x]; 
      } 

     } 
if(e.keyCode==40){ 
     character_top += 10; 
     y += 1; 
     playerPos=mapArray[y][x]; 

     character.style.top = character_top + "px"; 
     if(character_top >= 190){ 
      character_top -= 10; 
      y -= 1; 
      playerPos=mapArray[y][x]; 
      } 
     } 
if(e.keyCode==38){ 
     character_top -= 10; 
     y -= 1; 
     playerPos=mapArray[y][x]; 

     character.style.top = character_top + "px"; 
     if(character_top <= 0){ 
      character_top += 10; 
      y += 1; 
      playerPos=mapArray[y][x]; 

      } 
     } 
} 
+0

我不知道我理解你的問題:你想檢查玩家是否可以移動/你想檢測collsions? – Piotrek

+0

基本上我想檢測碰撞。 – user3079304

+0

和mapArray中有什麼? – Piotrek

回答

2

您需要創建一個數組,您可以在其中指定可以移動的圖塊。所以:

var iCanMoveOn = [0, 2, 5]; 

而且你需要檢查你旁邊的瓷磚是否可以移動。

if(iCanMoveOn.indexOf(mapArray[y][x+1]) > -1){ 
    //move player 
} 

xy的座標在哪裏數組是一磚你是stading。要檢查是否可以踩入拼貼,您需要從座標之一添加或取消「1」。所以:

[x+1]在右邊是瓦片。同理:左邊是瓷磚[x-1],在上面平鋪:[y-1],底瓦:[y+1]

要檢查數量是數組我用this

+0

謝謝!隨着你的小小的建議,我修補了一下,得到了我想要的效果! – user3079304