我正在使用 THREE.js 和 WebGL 渲染制作一个 3D 突破游戏。我想用 THREE.Ray 来检测弹跳球和底部平台之间的碰撞,这可以由你控制,但是我遇到了麻烦。
我已经设法将光线从平台投射到球(或其他方式),但一旦我这样做,球就会卡在屏幕中间并且无法动画。
var ray = new THREE.Ray( platform.position, ball.position.subSelf( platform.position ).normalize() );
var intersects = ray.intersectObject( ball );
if ( intersects.length > 0 ) console.log(intersects[0].distance);
我试过删除subSelf
andnormalize()
但这会破坏检测。
这是游戏,代码可以在 script.js 中找到:
http://dl.dropbox.com/u/4531743/WebGL/Breakout-3D/index.html
如果您打开控制台,您可以看到移动面板时距离值会发生变化,这很好。但是球不能被动画化,因为在每一帧它都被设置到那个位置。
http://dl.dropbox.com/u/4531743/WebGL/Breakout-3D/index.html#disableRay
以上是我最初的做法,只是通过计算球和面板的 Z 位置并查看它是否更大并且在面板的宽度 (x) 坐标内,如果是,则将其反弹。
球的弹跳只是每帧将 X 和 Z 坐标改变一个固定的量,如果它在任一方向上走得太远,则反转该量使其返回。