Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Funkcja zwracająca różne wartości dla tych samych argumentów
Forum PHP.pl > Forum > Po stronie przeglądarki > JavaScript
sweter
Witam,

piszę grę przeglądarkową - proste SimCity. Natrafiłem na dziwne zachowanie JS podczas funkcji rysującej drogę. Oto ona:
[JAVASCRIPT] pobierz, plaintext
  1. drawRoadHelper: function(x_from, y_from, x_to, y_to) {
  2.  
  3. width = Math.abs(x_from - x_to);
  4. height = Math.abs(y_from - y_to);
  5.  
  6. if (x_from < x_to) {
  7. x_tmp_from = parseInt(x_from);
  8. x_tmp_to = parseInt(x_to);
  9. x2 = parseInt(x_from);
  10. } else {
  11. x_tmp_from = parseInt(x_to);
  12. x_tmp_to = parseInt(x_from);
  13. x2 = parseInt(x_to);
  14. }
  15.  
  16. if (y_from <= y_to) {
  17. y_tmp_from = y_from;
  18. y_tmp_to = y_to;
  19. } else {
  20. y_tmp_from = y_to;
  21. y_tmp_to = y_from;
  22. }
  23.  
  24. position_x = new Array();
  25. position_y = new Array();
  26. i = 0;
  27.  
  28. if (width > height) {
  29. // leży
  30. for (x = x_tmp_from; x <= x_tmp_to; x++) {
  31. position_x[i] = parseInt(x);
  32. position_y[i] = parseInt(y_from);
  33. i++;
  34. }
  35. for (y = y_tmp_from; y <= y_tmp_to; y++) {
  36. position_x[i] = parseInt(x_to);
  37. position_y[i] = parseInt(y);
  38. i++;
  39. }
  40. } else if (width <= height) {
  41. // stoi lub kwadrat
  42. for (x = x_tmp_to; x >= x_tmp_from; x--) {
  43. position_x[i] = parseInt(x);
  44. position_y[i] = parseInt(y_to);
  45. i++;
  46. }
  47. for (y = y_tmp_to; y >= y_tmp_from; y--) {
  48. position_x[i] = parseInt(x_from);
  49. position_y[i] = parseInt(y);
  50. i++;
  51. }
  52. }
  53.  
  54. console.log(x_from, y_from, x_to, y_to);
  55. console.log(position_x);
  56. console.log(position_y);
  57.  
  58. return {
  59. 'position_x': position_x,
  60. 'position_y': position_y,
  61. 'width': width,
  62. 'height': height
  63. };
[JAVASCRIPT] pobierz, plaintext


Otrzymuje ona współrzędne początkowe i końcowe drogi. Ma zwrócić obiekt zawierający m.in. tablice 'position_x' i 'position_y'.
Pary z takimi samymi kluczami z tych tablic utworzą współrzędne gdzie ma być droga.

Funkcja jest wywoływana gdy kursor jest nad obszarem mapy.

Jak widzicie w funkcji są consol-logi, dzięki którym wiem co się dzieje w funckcji.

Problem polega na tym, że podczas przemieszczania kursora myszy nad mapą obliczane są niepoprawne wartości position_x i position_y.
Przykładowo to wypisuje mi w konsoli:
Cytat
11 9 16 14
[16, 15, 14, 13, 12, 11, 11]
[14, 14, 14, 14, 14, 14, 9]


Gdy jednak wywołam tą funkcję "ręcznie" w konsoli dla tych samych danych wynik jest odmienny i prawidłowy:
Cytat
Board.drawRoadHelper(11,9,16,14)
11 9 16 14
[16, 15, 14, 13, 12, 11, 11, 11, 11, 11, 11, 11]
[14, 14, 14, 14, 14, 14, 14, 13, 12, 11, 10, 9]


Dlaczego tak się dzieje? Jak to naprawić?
mortus
Cytat(sweter @ 20.12.2012, 11:46:18 ) *
Funkcja jest wywoływana gdy kursor jest nad obszarem mapy.

Wyjaśnij kiedy dokładnie (do jakiego zdarzenia jest podpięta) wywoływana jest Twoja funkcja. Najprawdopodobniej tu leży przyczyna problemu.
Zrób test i zaraz na początku funkcji wysyłaj na wyjście konsoli jakiś log w stylu "i just started drawRoadHelper function", no i obserwój konsolę w czasie, gdy pojawia się problem.

Jak to naprawić? Trzeba albo podpiąć funkcję pod inne zdarzenie, albo przed jej uruchomieniem sprawdzić, czy została już uruchomiona, czy nie i od tego uzależnić jej kolejne wywołanie.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.