【发布时间】:2018-08-25 17:47:21
【问题描述】:
我使用了三个指针锁定控件作为对象的控件,并且还使用了透视相机,但是当我将它们都添加到对象时,只添加了其中一个,这取决于我首先添加的是哪一个。同样作为一个初学者,我不熟悉如何移动对象,当我使用 WASD 键时,我移动的方向也会随着相机移动的角度旋转。这里只有重要的代码片段。
当我移动我的对象时,它只向北、E、S、W 方向移动,但当我移动我的相机时,它仍然在它产生时的方向移动,而不是改变方向的角度所以如果我瞄准东方并且我向前移动它会向北。
此外,当我向任何方向移动时,对象会移回 0、0、0
function e() {
camera = new THREE.PerspectiveCamera(75, window.innerWidth / window.innerHeight, 1, 1000);
scene = new THREE.Scene();
scene.background = new THREE.Color(0xffffff);
var playerGeometry = new THREE.BoxBufferGeometry(10, 40, 10);
playerGeometry = playerGeometry.toNonIndexed(); // ensure each face has unique vertices
var playerMaterial = new THREE.MeshPhongMaterial({
specular: 0xffffff,
flatShading: true,
vertexColors: THREE.VertexColors
});
window.player = new THREE.Mesh(playerGeometry, playerMaterial);
console.log(player);
window.player.add(camera);
camera.position.set(0, 20, 20);
controls = new THREE.PointerLockControls(camera);
window.player.add(controls.getObject());
scene.add(player);
objects.push(player);
}
========================================================================= // Then the animation, these are just snippets not ofc the whole thing
function animate() {
requestAnimationFrame(animate);
if (controls.enabled) {
raycaster.setFromCamera(direction, camera);
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 -= 3.8 * 100.0 * delta; // 100.0 = mass
if (window.player.position) {
window.player.position.z = Number(keys[87]) - Number(keys[83]);
window.player.position.x = Number(keys[65]) - Number(keys[68]);
window.player.position.normalize(); // this ensures consistent movements in all directions
if (keys[87] || keys[83]) window.player.position.z -= window.player.position.z * 400.0 * delta;
if (keys[65] || keys[68]) window.player.position.x -= window.player.position.x * 400.0 * delta;
if (keys[32]) velocity.y = 200;
}
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;
}
prevTime = time;
if (camControls) camControls.update(delta);
}
renderer.render(scene, camera);
}
【问题讨论】:
标签: javascript math three.js physics game-development