всё то же самое - но вместо цикла ты определяешь какая координата точно увеличится исходя из вычисления бОльшей дельты - тогда переменную err заводить не надо.
я так понял это в игре самонаведение какое-то ?
Вид для печати
тогда алгоритм нужно изменить - всё как я писал только алгоритм вернёт сколько и каких координат нужно увеличить - то есть на пункте 7 делаем выход из цикла и имеем n - это кол-во приращений координаты с большей дельтой, а координата с меньшей дельтой увеличится на 1.
---------- Post added at 20:28 ---------- Previous post was at 20:22 ----------
упд
для прямых линий будет работать криво - нужно выделять заранее кол-во итераций алгоритма - например 3-4 - и после работы координаты будут изменены по направлению к цели
а координаты изменяются каждый фрейм ?
Необязательно.
Метла может быть занята подметанием (т.е. другая процедура изменения), может стремится к коту, может ждать пока он приземлится (когда шуганула и кот полетел), может прервать преследование (если кота схватила собака). В общем условий дофига, но когда преследует - то каждый фрейм меняется (пока что так думаю, возможно будет слишком быстро, придётся замедлять, или слишком медленно - придётся менять два раза например.)
примерно так:
то есть мы даём алгоритму столько итераций - сколько фреймов метла бездействовала.Код:var1 = 4 - некая глобальная переменная которая устанавливается 1 раз в начале игры для отладки - в релизе заменить константой
var2 = 0 - тут просто глобальная переменная
call user_input_and_get_cat_coords - опрашиваем кнопки и меняем координаты кота - к примеру каждый фрейм
call metla_AI
ret
metla_AI:
var2=var2+1
if var2 <> var1 then exit
var2=0
dx=x0-x1
dy=y0-y1
err=0
x=0,y=0
;дальше опишу для случая если dy больше dx - если меньше то такая же ветка но поменять местами x и y
for n=1 to var1 ;выделяем 4 итерации для алгоритма брезенхейма
inc(y)
err = err+dx
if err >= dy then
err=err-dy
inc(x)
end if
next n
result x0+x,y0+y
Если var1 = 4 (или 3, или ещё как) то в общем-то работает.
Но если var1=1 (т.е нужно сделать один шаг) то лажает.
Надо придумать что-то другое, брезенхем тут видимо не поможет.
Как-то вычислить шаг по у и по x для одного передвижения.
Собственно для случая dx>dy шаг по х равен 1, а у надо как то узнать уменьшать или нет. Не могу только понять как именно, блин, тяжкое это дело математика.