2015-12-14 99 views
0

我能夠通過改變其狀態state.pos及其state.old.pos來將物體移動到特定點。但它似乎失去了它的速度(和我想的加速度)。通過使用PhysicsJS改變其位置來移動物體

做這樣的:

ship.body.state.pos.x = -context.width/2 - ship.radius; 
ship.body.state.old.pos.x = -context.width/2 - ship.radius; 

有沒有更好的辦法做到這一點?我怎樣才能改變自己的立場,並保持一切?

在文檔中有沒有關於它的東西?我無法找到它。

回答

-1

我找到了解決方案。我沒有經歷所有的源代碼,但有一些與Physicsjs集成商的經驗(https://coderwall.com/p/ntb6bg/metres-seconds-and-newtons-in-physicsjs)我開始認爲他們可能是我的問題的根源。

所以,顯然verlet integrator是Physicsjs模擬的默認值。我以前用過它,它很棒。但verlet集成者使用先前的位置來計算下一個位置(不只是位置,它比這更復雜一點),所以手動更改它會使事情變得更糟。我不知道如何「修復」,或者甚至可能。但還有另一種方法。

在我的情況下,我有一個純樸的牛頓模擬沒有花哨的東西或瘋狂的價值(我在這裏使用技術術語...),所以一個歐拉集成工作得很好,因爲它不使用以前的位置來計算接下來它是完美的「teletransport」我的對象不失速度,方向等

記住加載積分:

void function (define) { 'use strict'; define( [ 'physicsjs', 'physicsjs/behaviors/attractor', 'physicsjs/behaviors/body-collision-detection', 'physicsjs/behaviors/sweep-prune', 'physicsjs/bodies/circle', 'physicsjs/integrators/improved-euler' ], physicsModule ); // function physicsModule(physics) { return physics; } }(define);

還有要記得積分添加到模擬:

void function (define) { 'use strict'; define( [ 'physics' ], simulationModule ); // function simulationModule(physics) { var simulation = physics(); simulation.add(physics.behavior('body-collision-detection')); simulation.add(physics.behavior('sweep-prune')); simulation.add(physics.integrator('improved-euler')); return simulation; } }(define);

1

您正在將兩個位置移動到相同的固定位置。因此速度被設置爲零。

您應該移動兩個位置相同的距離,以保持它們之間的距離。

+0

有趣的拿。我會仔細看看的。謝謝。 – slacktracer