与SAT未对齐碰撞盒的ThreeJS碰撞

时间:2015-06-13 13:52:20

标签: javascript three.js collision-detection

我目前正在为一所简单的学校游戏工作,但我遇到了碰撞问题。碰撞盒似乎错过了对齐。

这是游戏: http://ggeasy.herokuapp.com/game

这些小盒子的绘制方式如下:

for(var x = 0; x < colliderPolygon.points.length; x++){
    var test = new THREE.Mesh(new THREE.CubeGeometry(8,8,8),material)
    test.position.x = colliderPolygon.pos.x + colliderPolygon.calcPoints[x].x
    test.position.z = colliderPolygon.pos.y + colliderPolygon.calcPoints[x].y
    this.mesh.add(test)
}

我翻译了碰撞,因为理论上ThreeJS位置被绑定到盒子的底部中心,而在SAT中它被绑定到盒子的顶角。

整个程序的代码可在此处获得: https://github.com/Hajtosek/ggEasy

任何想法,做错了什么?

1 个答案:

答案 0 :(得分:2)

好的,关键是要了解位置绑定点在哪里。

THREE.JS将它放在网格的中间位置,但是SAT将它放在左上角。  var collider = new SAT.Box(new SAT.Vector(cubeMesh.position.x - halfwidth,cubeMesh.position.z - halfHeight),width,height);