我的地图数组;;
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 =没什么
我要在地图中检测黑白玩家和障碍物的碰撞检测。
player.x& player.y是左上角的参考。 每个障碍的宽度和长度都是40px。
我需要一个概念而不是代码
答案 0 :(得分: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/
答案 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
}