我目前正在为一所简单的学校游戏工作,但我遇到了碰撞问题。碰撞盒似乎错过了对齐。
这是游戏: 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
任何想法,做错了什么?
答案 0 :(得分:2)
好的,关键是要了解位置绑定点在哪里。
THREE.JS将它放在网格的中间位置,但是SAT将它放在左上角。 var collider = new SAT.Box(new SAT.Vector(cubeMesh.position.x - halfwidth,cubeMesh.position.z - halfHeight),width,height);