Witam,
Mam dość niewygodny problem. Nie jestem aż tak dobry z matematyki żeby z tym sobie poradzić. Chodzi o to, że mam stworzoną mapę do gry. Gracz może się po niej przemieszczać. Gdy zaczyna się przemieszczać do bazy zapisują się wszystkie informacje o podróży wraz z czasem. Jeśli wejdzie na stronę ponownie - podróż jest nadal kontynuowana. Działa to na takiej zasadzie że czas który pozostał do ukończenia podróży zamieniany jest na milisekundy i daje wtedy pozostały czas animacji. Wtedy za pomocą $.animate() przesuwam gracza do pozycji końcowych X i Y. Problem w tym, że nie mogę rozgryźć równania, które względem koordynacji Ax, Ay, Bx, By, oraz długości ścieżki wyliczy gdzie teraz znajduje się gracz.
Mam już takie obliczenia: Całkowity czas podróży, czas który pozostał, czas który gracz już przebył, odcinek który gracz już przebył (w px), nawet procent który przebył. Ale nie mogę nadal wyliczyć tych końcowych koordynatów X i Y. Proszę o pomoc, bo męczę się z tym już długi czas.
Oto kod:
//FUNKCJA ZNAJDUJĄCA POZYCJĘ GRACZA WZGLĘDEM PUNKTU A I B, ORAZ WZGLĘDEM CZASU KTÓRY GRACZ PRZEBYŁ
function findPosition(aX, aY, bX, bY) {
var travelTime = localStorage.travel;
var startPos = gridToPos(aX, aY); //to po prostu zamienia numer grid'a na pozycję w pikselach
var endPos = gridToPos(bX, bY); //to również
var timeFull = tileDistanceTo(aX, aY, bX, bY); //to wylicza czas który zajmie graczowi przejście do grida zaokrąglając do jednej dziesiętnej
var timeFullSeconds = (timeFull[0]*60*60) + timeFull[1]*60; //zamienia czas z funkcji wyżej na sekundy
var timeNow = new Date().getTime();
timeNowSeconds = timeNow/1000;
var secondsDifference = travelTime - timeNowSeconds; //różnica między czasem teraz a czasem przyszłym - w którym gracz dotrze na miejsce
var timeTraveled = timeFullSeconds - secondsDifference; //czas który przebył już gracz
var timeStart = timeNow - timeTraveled; //czas w którym gracz rozpoczął podróż (unix)
var pathLength = pixelDistanceTo(startPos[0], startPos[1], endPos[0], endPos[1]); //znajduje długość ścieżki od punktu A do punktu B, zwraca długość ścieżki w px
var pathTraveled = (timeTraveled * pathLength) / timeFullSeconds; //cała droga którą przebył od początku gracz (w px)
var percent = (pathTraveled / pathLength) * 100; //procent przebytej drogi
var startX = startPos[0];
var startY = startPos[1];
var endX = endPos[0];
var endY = endPos[1];
var A = [startX, startY];
var B = [endX, endY];
var r = pathTraveled;
var a = A[1] - B[1];
a = a / A[0] - B[0];
var b = A[1] - (a * A[0]);
alert(a+" "+b);
var Dx = r*Math.sqrt(Math.pow(a, 2) + Math.pow(1, 2))+2*b; //to powinno wyliczyć moją pozycję X.
Dx = Dx / 2*a; //a to pozycję Y.
var Dy = a*Dx+b;
window.player.css({
left: Dx+"px",
top: Dy+"px"
});
}
Niestety funkcja nie działa, numery wychodzą ujemne albo ekstremalnie duże. Proszę o pomoc.
Pozdrawiam,
Hazes.