piszę grę przeglądarkową - proste SimCity. Natrafiłem na dziwne zachowanie JS podczas funkcji rysującej drogę. Oto ona:
drawRoadHelper: function(x_from, y_from, x_to, y_to) { width = Math.abs(x_from - x_to); height = Math.abs(y_from - y_to); if (x_from < x_to) { x_tmp_from = parseInt(x_from); x_tmp_to = parseInt(x_to); x2 = parseInt(x_from); } else { x_tmp_from = parseInt(x_to); x_tmp_to = parseInt(x_from); x2 = parseInt(x_to); } if (y_from <= y_to) { y_tmp_from = y_from; y_tmp_to = y_to; } else { y_tmp_from = y_to; y_tmp_to = y_from; } position_x = new Array(); position_y = new Array(); i = 0; if (width > height) { // leży for (x = x_tmp_from; x <= x_tmp_to; x++) { position_x[i] = parseInt(x); position_y[i] = parseInt(y_from); i++; } for (y = y_tmp_from; y <= y_tmp_to; y++) { position_x[i] = parseInt(x_to); position_y[i] = parseInt(y); i++; } } else if (width <= height) { // stoi lub kwadrat for (x = x_tmp_to; x >= x_tmp_from; x--) { position_x[i] = parseInt(x); position_y[i] = parseInt(y_to); i++; } for (y = y_tmp_to; y >= y_tmp_from; y--) { position_x[i] = parseInt(x_from); position_y[i] = parseInt(y); i++; } } console.log(x_from, y_from, x_to, y_to); console.log(position_x); console.log(position_y); return { 'position_x': position_x, 'position_y': position_y, 'width': width, 'height': height };
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]
[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]
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ć?