2011-02-02 140 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 
}