我正在嘗試使用Phaser 2.4.6和隨附的p2.js版本將物體從點A移動到點B.身體準確地停在目的地點,而不是在點後或經過點後非常重要(非常低的容差是可以接受的)。我已嘗試兩種方法到目前爲止,並且都失敗:使用Phaser和p2.js物理的「精確移動」物體
- 使用Phaser補間來更改我希望它移動的路線上的身體座標。這工作很好,除了身體可以跳過靜態身體。
示例代碼:
game.add.tween(sprite.body).to(
{ x: destinationX, y: destinationY },
timeInterval,
Phaser.Easing.Quadratic.InOut,
true
);
- 使用P2
force
屬性來移動身體所需的路徑上。與其他身體的碰撞這次運作良好,但幾乎不可能讓身體停在我想要的座標上。我試圖減少身體接近目的地時施加的力量,這在90%的情況下效果很好。然而,在低性能場景中,動畫是「緊張的」(這是可以預料的),但也未能達到目標點並超越它,有時是很多。我甚至會接受強制停止身體的選擇,當它撞擊到目的地並且傷害場景的真實性時,但我無法做到這一點(試圖將力和速度都設置爲0,阻尼等於1等等 - 沒有任何工作)。
下面一些示例代碼(在移相器引擎sprite.body.data
是指向p2.js物理學體):
// OUTSIDE OF THE GAME LOOP:
var magnitude = game.physics.p2.pxmi(-speed);
var angle = entity.body.data.angle + Math.PI/2;
var forceX = (magnitude * Math.cos(angle))/10;
var forceY = (magnitude * Math.sin(angle))/10;
// IN THE GAME LOOP:
sprite.body.data.force[0] = forceX;
sprite.body.data.force[1] = forceY;
// Decrease forceX and forceY as the body approaches the destination
可有人請提供一些建議嗎?在這一點上我迷失了方向,所以我甚至可以使用熟悉其他物理引擎的人的有根據的猜測。
謝謝。
你可以添加你嘗試過的代碼,所以我們有一個起點幫助? –
@JamesSkemp我加了一些代碼。我真的想要得到第二種方法來工作。目前我正在減少X和Y軸上的力量,因爲精靈正在接近目的地,直到它們最終都爲零。這是有效的,但是如果CPU非常繁忙,精靈開始移動(這是預期的)並最終超出目標點。 – AdrianT