2016-10-01 30 views
0

我使用了一個簡單的設置Cannon.js,下面的示例在線,但是當我在構造函數中設置任何屬性時,位置和角速度x,y和z都是NaN。加農炮JS - 位置向量NaN後啓動屬性的身體

這有效,但不移動,因爲身體沒有質量。

const body = new CANNON.Body(); 
console.log(body.position.x, body.mass); //logs 0, 0 

然而,這不...

const body = new CANNON.Body({ 
    mass: 1, 
}); 
console.log(body.position.x, body.mass); //logs NaN, 1 

另外,如果我實例化的身體,然後設定批量化後,它仍然不動。

上下文的一些代碼(我正在調用動畫循環中的更新函數,並且它正在發生A-OK)。

export const init =() => { 
world = new CANNON.World(); 
world.gravity.set(0,1,0); 
world.broadphase = new CANNON.NaiveBroadphase(); 
world.solver.iterations = 10; 

for (let i = 0; i < BODIES_COUNT; i++) { 
    const shape = new CANNON.Box(new CANNON.Vec3(4,4,4)); 
    const body = new CANNON.Body({ 
     mass: 1, 
    }); 
    const body = new CANNON.Body(); 
    body.addShape(shape); 
    body.position.set(0, 0, 0); 
    body.mass = 1; 
    body.angularVelocity.set(0, 2, 0); 
    body.velocity.set(0, 1, 0); 
    body.angularDamping = 0.5; 

    world.addBody(body); 
    bodies.push(body); 

    const geometry = new THREE.BoxGeometry(10, 10, 10); 
    const material = new THREE.MeshBasicMaterial({ color: 0xff0000, wireframe: true }); 
    const mesh = new THREE.Mesh(geometry, material); 
    meshes.push(mesh); 
} 
} 

export const update = (delta) => { 
    world.step(TIMESTEP * delta); 
} 
+0

無法重現body.position.x === NaN的問題,而不是通過主分支版本。另外,由於您定義了「const body」兩次,因此運行上面的代碼應該會引發語法錯誤。 – schteppe

+0

第二個機構是一個錯誤 - 它實際上並不在我的代碼中,當我寫這個問題的時候,它不知何故陷入了這裏。現在刪除它。 我也使用v0.6.2 - 很奇怪爲什麼這不起作用。我只能認爲它可能與Babelify有一些錯誤。 –

回答

1

我能想到的唯一的事情是,你不小心通過delta = 0world.step。攝製使用Cannon.js v0.6.2:JSFiddle

試着改變你的代碼:

使用上NPM Cannon.js v0.6.2
export const update = (delta) => { 
    if (delta > 0) { 
     world.step(TIMESTEP * delta); 
    } 
} 
+0

嘿,是的,我認爲這是問題。在第一個循環中,增量爲0,我沒有想到這是一個問題,但似乎是這樣。感謝您的幫助 –

+0

沒問題。這實際上是Cannon中的一個bug - step()應該能夠處理零參數。感謝您提出。 – schteppe

+0

啊哈 - 我覺得這看起來很奇怪。很高興有幫助。順便說一下,圖書館很棒,工作很好。如果您有任何好的學習資源,請按照我的方式發送給他們。找到了一些,但也許你知道一些好的。 –