これは以前に何度か尋ねられたことがあることは知っていますが、実際に機能する答えは見つかりませんでした。似たようなものもありますが、移動距離によって速度が異なります。
ですから、私の問題は、オブジェクト(この場合はプレーヤー)を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がプレイヤーをドラッグの方向に向けさせ、その部分が正常に機能することを追加したいと思います。