2016-11-24 2 views
3

Je travaille sur un projet Three.js en utilisant PointerLockControls (full modified code). Je voudrais mettre en œuvre la détection de collision pour le playehr. Je vais à ce sujet en faisant un nouvel objet cylindre Physijs et passer ensuite avec l'appareil photo à PointerLockControls:Three.js PointerLockControls et détection de collision Physisjs

var player = new Physijs.CylinderMesh(new THREE.CylinderGeometry(2, 2, 10, 32) , playerMaterial); 
    player.position.set(0, 5, 0); 
    player.addEventListener('collision', handleCollision); 
    scene.add(player); 

    controls = new PointerLockControls(camera, player); 

En PointerLockControls, j'attach alors l'objet externe (gestionnaire de rotation de lacet) au joueur passé objet, puis déplacez l'objet joueur dans le monde.

velocity.x -= velocity.x * 10 * dt; 
velocity.z -= velocity.z * 10 * dt; 
velocity.y -= 9.8 * 20 * dt; 

if (moveForward) velocity.z -= 180 * dt; 
if (moveBackward) velocity.z += 180 * dt; 
if (moveLeft) velocity.x -= 180 * dt; 
if (moveRight) velocity.x += 180 * dt 

player.translateX(velocity.x * dt); 
player.translateY(velocity.y * dt); 
player.translateZ(velocity.z * dt); 

Cependant, lors de tests, à la fois l'objet de joueur et la phase de la caméra à travers le plancher, ou, si translateY est commenté, ne rien faire vibrer saccades en place lorsque je tente de les déplacer.

Où est-ce que je me suis trompé lors de la configuration? Il me semble que le problème vient d'attacher le yawObject à un objet joueur, puis de déplacer la bonne façon de faire la détection de collision avec ma configuration?

Répondre

0

J'ai trouvé la réponse à ma propre question: Physijs ne supporte pas la manipulation d'objets de style three.js. Si nous voulons utiliser la traduction() comme je l'ai fait dans mon code, nous avons besoin de mettre à jour le paramètre de position sale de l'objet comme ceci:

player.translateX(velocity.x * dt); 
player.translateY(velocity.y * dt); 
player.translateZ(velocity.z * dt); 
player.__dirtyPosition=true; 

dessus fera le travail de mouvement.