Форум сайта python.su
Не знаю, почему заблочили мою тему об имитации полёта пули - http://python.su/forum/topic/22375/
Да и что-то, не очень помогаете новичку (
Но мне удалось самому разобраться, надо было заюзать atan2 вместо atan
Правда, есть погрешности из-за округлений. Тобишь, нельзя попасть в некоторые места, только если игрок сменит позицию. Ну и также, не очень гладкое отображения полёта пули. Как можно повысить точность? Или это невозможно впринципе? Какие есть алгоритмы, примеры?
Офлайн
Не очень понятно. Ты не можешь провести прямую через две точки чтоли?
Офлайн
Не так, если ты пускаешь из точки А пулю по направлению к точке Б, на самом деле её полет отклоняется чутка и пролетает мимо. Выходит, надо делать постоянные корректировки?
Офлайн
Так у вас вид сверху или вид сбоку в игре?
Если у вас вектор движения пули не прямая, то в уравнении ошибка.
Нарисуйте пару картинок, чтобы прояснить ситуацию.
Офлайн
Я там уже писал, что игра похоже на crimsonland. И похоже, проблема решилась, постоянной корректировкой - поправкой на курс )
Офлайн
LexanderБлин, какие корректировки. Вычисли уравнение прямой, и оно не будет отклоняться…
Не так, если ты пускаешь из точки А пулю по направлению к точке Б, на самом деле её полет отклоняется чутка и пролетает мимо. Выходит, надо делать постоянные корректировки?
Отредактировано sergeek (Сен. 24, 2013 15:31:28)
Офлайн
sergeekПохоже он считает от текущих координат пули да ещё и приведённых к целым.
Блин, какие корректировки.
Офлайн
Не лучше выходит, во-первых, надо делать проверку на деление на ноль, во-вторых, разложить скорость надо по осям всё равно, ну, хотя бы на х, а y = kx + b
По-моему, ничуть не легче… даже сложнее
Офлайн
Master_Sergiusкак-будто так много делов
во-первых, надо делать проверку на деление на ноль
Master_Sergiusзачем по осям? По длине отрезка же проще будет
во-вторых, разложить скорость надо по осям всё равно,
Master_SergiusДа не легче/сложнее а единственно верный способ по-моему. То, что ты там пытался делать я вообще понять не могу.
По-моему, ничуть не легче… даже сложнее
Офлайн
А по-моему, прекрасно получилось, вот таким образом, правда, пришлось if добавить, чтобы пуля пролетала дальше, чем цель
def move(self): self.off() x, y = self.get_coords() if abs((self._tx - x) * (self._ty - y)) < BULLETSPEED * BULLETSPEED: self._hit_target = True if not self._hit_target: angle = math.atan2(self._ty - y, self._tx - x) self._dx = int(round(self._speed * math.cos(angle))) self._dy = int(round(self._speed * math.sin(angle))) self._set_coords(x + self._dx, y + self._dy) self.on()
Офлайн