javascript游戏中的碰撞检测?

时间:2011-02-02 07:11:27

标签: javascript collision-detection

我的地图数组;;

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。

我需要一个概念而不是代码

2 个答案:

答案 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
}