2011-02-02 120 views
0

我的地圖數組; ;;在JavaScript遊戲中碰撞檢測?

 
map[0] = [0,0,0,0,0,0] 
map[1] = [0,1,0,1,0,1] 
map[2] = [0,0,0,0,0,0] 
map[3] = [1,0,1,0,1,0] 
map[4] = [0,0,0,0,0,0] 
map[5] = [0,1,0,1,0,1] 

1 =跨欄 0 =無

我來檢測碰撞檢測的B/W播放器和在地圖障礙。

player.x & player.y是左上方的參考。 每個欄都是40px的寬度和長度。

我需要一個大致的概念不規範

+0

有什麼錯`圖[player.y] [player.x]`? – 2011-02-02 07:24:10

+0

0代表40px空的地方,1 = 40 px box ..如果玩家在player.x <40或player.y <40 – lallalalal 2011-02-02 07:25:55

回答

0

你必須正常化球員位置到碰撞地圖單元作爲球員的位置是在px單位和你的碰撞圖是array index單位如果電場則考驗玩家嘗試進入並不是一個障礙。

function normalizePosition(entity){ 
    return { 
     x: Math.ceil(entity.pos.x/TILE_WIDTH), 
     y: Math.ceil(entity.pos.y/TILE_HEIGHT) 
    } 
} 

正常化位置會給你實體協調碰撞地圖,下次你要測試的實際碰撞,看看有什麼樣的瓷磚是進入

function mapCollision(entity, map){ 
    var mapCoords = normalizePosition(entity), 
     tileType = map[mapCoords.y][mapCoords.x]; 
    return tileType; 
} 

它將返回的代碼實體地圖上的瓦片類型用於玩家規範化的位置,以防你想要擁有不同的東西,然後阻止像減速陷阱或任何其他熊坑。然後,您可以處理不同的情況,其中零將默認接受玩家進入瓦片。

希望我沒有告訴太多:)

祝你遊戲和它完成後,如果你還記得我會很高興,如果你跟我分享一下效果:)

湯姆

更新

我爲更好的詮釋目的的一個簡單的例子: http://fiddle.jshell.net/qFCyn/1/

0

使用此:

var BLOCK_SIZE = 40; // 40px * 40px blocks 
var hurdle = map[player.y/BLOCK_SIZE][player.x/BLOCK_SIZE] 
if(hurdle) { 
    // stuff 
} else { 
    // other stuff 
}