2016-11-24 5 views
3

私はPointerLockControls(full modified code)を使ってThree.jsプロジェクトに取り組んでいます。私はplayehrの衝突検出を実装したいと思います。私は新しいPhysijsシリンダーオブジェクトを作ることによって、この程度だろうし、その後PointerLockControlsにカメラでそれを一緒に渡している:PointerLockControlsでThree.js PointerLockControlsと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); 

、私はそれから渡されたプレイヤーに外部オブジェクト(ヨー回転ハンドラ)を添付しますワールドにプレーヤーオブジェクトを移動します。

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); 

しかし、テスト時に、プレイヤオブジェクトと床を介してカメラ相、またはその両方、移動Yがコメントアウトされている場合、何もしないが、私はそれらを移動しようとすると、jerkily場所に振動します。

これを設定するのは間違っていましたか?私の問題は、プレーヤーオブジェクトにyawObjectを付けて、それを正しい方法で移動して自分の設定で衝突の検出を行うことから来ているようです。

答えて

0

私自身の質問に答えが見つかりました: Physijsはthree.jsスタイルのオブジェクト操作をサポートしていません。我々は(翻訳を使用したい場合は)私は私のコードで行ったように、我々はそうのように、オブジェクトの汚れ位置パラメータを更新する必要があります。上記

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

移動作業を行います。