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