我正在编写一个Three.js Jump'n'Run游戏并且无法实现玩家碰撞(z和x轴)。目标是达到地图的最高点,同时不应该通过对象。因此,我使用raycaster不会穿过物体(立方体),这部分到目前为止工作。我仍然没有找到实现水平碰撞的方法。 任何想法/建议/解决方案?
另一个简短的问题 - 在我们的案例中如何设置起点的位置坐标?
任何帮助将受到高度赞赏! :)
演示:http://www.unet.univie.ac.at/~a1169112/sealevel/sealevel.html
github:https://github.com/f3lixl3nz/anvis/tree/master/sealevel
function animate() {
requestAnimationFrame( animate );
if ( controlsEnabled === true ) {
raycaster.ray.origin.copy( controls..getObject().position );
raycaster.ray.origin.y -= 10;
var intersections = raycaster.intersectObjects( objects );
var onObject = intersections.length > 0;
var time = performance.now();
var delta = ( time - prevTime ) / 1000;
velocity.x -= velocity.x * 10.0 * delta;
velocity.z -= velocity.z * 10.0 * delta;
velocity.y -= 9.8 * 100.0 * delta; // 100.0 = mass
direction.z = Number( moveForward ) - Number( moveBackward );
direction.x = Number( moveLeft ) - Number( moveRight );
direction.normalize(); // this ensures consistent movements in all directions
if ( moveForward || moveBackward ) velocity.z -= direction.z * 800.0 * delta;
if ( moveLeft || moveRight ) velocity.x -= direction.x * 800.0 * delta;
if ( onObject === true ) {
velocity.y = Math.max( 0, velocity.y );
canJump = true;
}
controls.getObject().translateX( velocity.x * delta );
controls.getObject().translateY( velocity.y * delta );
controls.getObject().translateZ( velocity.z * delta );
if ( controls.getObject().position.y < 10 ) {
velocity.y = 0;
controls.getObject().position.y = 10;
canJump = true;
}
if(water) {
water.material.uniforms.time.value += delta;
}
prevTime = time;
}
renderer.render( scene, camera );
}