Forum in READ ONLY mode! All questions and discussions on Discord official server, invite link: https://discord.gg/VxsGzJ7
Как сделать таймаут для Move
Как сделать таймаут для Move
Если не может дойти до точки столько-то, что бы делал то-то?
Ивентами точно никак? Жаль конечно, так не хочется ходилку писать, а через массив я все равно встроеной хожу типа этого =)
Code: Select all
rpatch := GetPathArray(1444, 1688, false, 0, MovePathArray);
For i := 0 to rpatch-1 do
begin
movetimeout:= 0;
repeat
MoveXY(MovePathArray[i].x,MovePathArray[i].y,false,0,false);
wait(100);
movetimeout:= movetimeout + 1;
until (GetX(self) = MovePathArray[i].x) and (GetY(self) = MovePathArray[i].y) or (movetimeout > 99)
end;
Перед началом движения запомни текущее время. Потом в основном цике ходилки проверяешь прошо нужное кол-во времени или нет.
В делфаке время - цисло с плавающей точкой. Кол-во дней в целой части, всё что меньше - в дробной. OldTime - Now возвратит кол-во дней, прошедших с OldTime. Чтобы получить кол-во часов нужно поделить полученое значение на 24, минут - поделить на (24*60) и так далее.
В делфаке время - цисло с плавающей точкой. Кол-во дней в целой части, всё что меньше - в дробной. OldTime - Now возвратит кол-во дней, прошедших с OldTime. Чтобы получить кол-во часов нужно поделить полученое значение на 24, минут - поделить на (24*60) и так далее.
Last edited by Fenix on 29.10.2010 10:03, edited 1 time in total.
Не единственно кривым способом же люди это делают.Vizit0r wrote:так что писать тогда, если она уже готова?
Так и будет наверное в итоге, только мне через юникстайм секундами проще таймштампы делать.Fenix wrote:Перед начало движения запомни текущее время. Потом в основном цике ходилки проверяешь прошо нужное кол-во времени или нет.
В делфаке время - цисло с плавающей точкой. Кол-во дней в целой части, всё что меньше - в дробной. OldTime - Now возвратит кол-во дней, прошедших с OldTime. Чтобы получить кол-во часов нужно поделить полученое значение на 24, минут - поделить на (24*60) и так далее.
Всем спасибо, ивентами бы как-нибудь.
А мне кажется, что так оно и есть:Savage wrote:Может лучше реализовать прерывание в самой ходилке если она не может сделать шаг с некоторой попытки? Пусть возвращает флаг успешно или фэйл.
Code: Select all
function MoveXY(Xdst, Ydst : Word; Optimized : Boolean; Accuracy : Integer; Running : Boolean) : Boolean
выходит он из мувера, если не может получить путь до цели. при этом возвращается false.
А так вообще он 3 раза тыкнется в препятствие, его отбросит, он пометит точку как непроходимую, попробует заново маршрут найти и так по кругу.
А так вообще он 3 раза тыкнется в препятствие, его отбросит, он пометит точку как непроходимую, попробует заново маршрут найти и так по кругу.
"Пишите код так, как будто сопровождать его будет склонный к насилию психопат, который знает, где вы живете". (с) Макконнелл, "Совершенный код".