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.