JS 2D碰撞矩形与地图

时间:2014-11-30 17:05:53

标签: javascript math 2d collision-detection

我有一个50宽30高的球员。我的问题是正确计算碰撞。我想通过检查玩家的中间位置(你可以在下面看到它)来做到这一点,但我也有考虑他的宽度和高度的问题 - 他的一半会在他停下来之前穿过墙。

地图被划分为多个正方形(例如100x100像素,100称为tileSize),正方形之间有一个墙或不是(每个正方形是一个可以有顶部或/和左边的对象,如果是真的,你不能通过广场的那一边 - 有一面墙。)

碰撞检测(item == player):

//inner walls - map collisions
var tileX = Math.floor(item.pos.x / this.tileSize);
var tileY = Math.floor(item.pos.y / this.tileSize);

var tileX = Math.floor(item.pos.x / this.tileSize);
var tileY = Math.floor(item.pos.y / this.tileSize);

if(tileX == item.last_X && tileY == item.last_Y){return;} //if its the same tile..

var colidedX = false;
var colidedY = false;
/* Check X */
if (item.last_X > tileX) {
    if (this.map[item.last_Y][item.last_X].left) {
        item.pos.x = item.last_X * this.tileSize;
        colidedX = true;
    }
}
if (item.last_X < tileX) {
    if (this.map[item.last_Y][item.last_X+1].left) {
        item.pos.x = (item.last_X+1) * this.tileSize;
        colidedX = true;
    }
}   
/* Check Y */
if (item.last_Y > tileY) {
    if (this.map[item.last_Y][item.last_X].top) {
        item.pos.y = item.last_Y * this.tileSize;
        colidedY = true;
    }
}
if (item.last_Y < tileY) {
    if (this.map[item.last_Y+1][item.last_X].top) {
        item.pos.y = (item.last_Y+1) * this.tileSize;
        colidedY = true;
    }
}   

if(colidedX == false){
    item.last_X = tileX;
}
if(colidedY == false){
    item.last_Y = tileY;
}

我知道如何才能做到这一点,但它会非常复杂和冗长,所以我认为必须有一种更简单的方法来做到这一点。

0 个答案:

没有答案