我知道这已经被问过几次了,但是我找不到真正有效的答案。有一个类似的,但速度会根据行驶的距离而变化。
所以我的问题是我试图让一个物体(在这种情况下是一个玩家)以恒定的速度从 A 点到 B 点移动一条很长的直线。这是通过单击播放器并拖动到我希望他走到的位置来完成的,因此它可以在任何方向和任何距离上。
我有一些代码几乎可以工作,但玩家总是会稍微偏离路线,更何况他行进的距离越长。这是该代码:
window.addEventListener('mouseup', function(e) {
selectedPlayer.moveX = e.pageX;
selectedPlayer.moveY = e.pageY;
movePlayer(selectedPlayer);
});
function movePlayer(player) {
var xDistance = player.moveX - player.x;
var yDistance = player.moveY - player.y;
var travelDistance = Math.sqrt((xDistance * xDistance) + (yDistance * yDistance));
var timeToTravel = travelDistance; //This may seem pointless, but I will add a speed variable later
var playerAngle = Math.atan2(yDistance, xDistance) * (180 / Math.PI);
var xRatio = Math.atan2(xDistance, travelDistance);
var yRatio = Math.atan2(yDistance, travelDistance);
//This function is called in another part of code that repeats it 60 times a second
walkPlayer = function() {
setTimeout(function(){
player.x = player.moveX;
player.y = player.moveY;
selectedPlayer = undefined;
walkPlayer = undefined;
}, timeToTravel * 20)
player.angle = playerAngle;
player.x += xRatio;
player.y += yRatio;
};
}
我希望这是有道理的,我只需要包含相关的代码部分。我认为我的问题可能在于 xRatio 和 yRatio 部分,但我无法弄清楚;我完全被难住了。
编辑:我想添加 playerAngle 使玩家面向拖动的方向,并且该部分工作正常。