我正在使用THREE.js和WebGL渲染制作一个3D打砖块游戏。我想使用THREE.Ray来检测弹跳球与底部平台之间的碰撞,该平台可以由您控制,但我遇到了麻烦。
我已经成功地从平台向球体(或者反过来)投射出一条光线,但是一旦这样做,球体就会卡在屏幕中央,无法进行动画处理。
我曾尝试移除
游戏和代码可以在 script.js 中找到。
球的弹跳只是每帧固定改变X和Z坐标的量,如果向任一方向走得太远,则反转该量使其返回。
我已经成功地从平台向球体(或者反过来)投射出一条光线,但是一旦这样做,球体就会卡在屏幕中央,无法进行动画处理。
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
和 normalize()
,但这会导致检测无法正常运行。游戏和代码可以在 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坐标的量,如果向任一方向走得太远,则反转该量使其返回。