тогда алгоритм нужно изменить - всё как я писал только алгоритм вернёт сколько и каких координат нужно увеличить - то есть на пункте 7 делаем выход из цикла и имеем n - это кол-во приращений координаты с большей дельтой, а координата с меньшей дельтой увеличится на 1.
---------- Post added at 20:28 ---------- Previous post was at 20:22 ----------
упд
для прямых линий будет работать криво - нужно выделять заранее кол-во итераций алгоритма - например 3-4 - и после работы координаты будут изменены по направлению к цели
С любовью к вам, Yandex.Direct
Размещение рекламы на форуме способствует его дальнейшему развитию
а координаты изменяются каждый фрейм ?
Необязательно.
Метла может быть занята подметанием (т.е. другая процедура изменения), может стремится к коту, может ждать пока он приземлится (когда шуганула и кот полетел), может прервать преследование (если кота схватила собака). В общем условий дофига, но когда преследует - то каждый фрейм меняется (пока что так думаю, возможно будет слишком быстро, придётся замедлять, или слишком медленно - придётся менять два раза например.)
примерно так:
то есть мы даём алгоритму столько итераций - сколько фреймов метла бездействовала.Код: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, а у надо как то узнать уменьшать или нет. Не могу только понять как именно, блин, тяжкое это дело математика.
Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)