Автокликер Clickermann :: Форум
Основной раздел => Общие вопросы => Topic started by: sibas on March 21, 2015, 09:03:28 AM
-
Снова Здравствуйте! У меня возник такой вопрос - объясняю по рисунку ниже: Зеленые кружочки с определенной скоростью движутся вправо до конца, на пути у них белый квадрат при попадании на который срабатывает if_pixel_in и через 3 секунды должна нажаться кнопка Q, потому-что чтобы кружочку добраться от белого до черного квадрата нужно 3 секунды, и thread еще не закончил свою работу но на белый квадрат наступил еще один кружочек и получается что он из за этого не нажмётся. Вопрос в этом и заключается, как мне это сделать? Есть догадки засунуть thread в thread но тут я путаюсь или засунуть getscreen в отдельный thread(если так можно) будут ли последующие потоки с if_pixel_in использовать обновленный getscreen из другого потока? Или же подскажите свою версию как это реализовать
WHILE(1)
GETSCREEN(617,670, 802,682)
SetThread (thr_q, 1)
END_CYC
THREAD(thr_q,0)
IF_PIXEL_IN(618,671, 647,681, 566784)
wait(3) // 3 sec
KEYDOWN(#q)
waitms(10)
KEYUP(#q)
SetThread (thr_q, 0)
END_THREAD
(http://cs624328.vk.me/v624328625/259d0/jEW9JcBKhNc.jpg)
-
Попробуй...
WHILE(1)
GETSCREEN(617,670, 802,682)
IF_PIXEL_IN(618,671, 647,681, 566784)
Switch($_time_s)
case(60)
ARRPUSH ($timen,3)
case(59)
ARRPUSH ($timen,2)
case(58)
ARRPUSH ($timen,1)
case(57)
ARRPUSH ($timen,0)
default
ARRPUSH ($timen,$_time_s+3)
End_switch
wait(1)
End_if
$timet=$timen[0]
IF($_time_s=$timet)
// Тут нужно извлечь 1 элемент из массива...сделай сам.
KEYPRESS(#Q)
End_if
END_CYC
-
И не хватает завершающего END_IF
WHILE(1)
GETSCREEN(617,670, 802,682)
SetThread (thr_q, 1)
WAITMS(5)
END_CYC
THREAD(thr_q,0)
IF_PIXEL_IN(618,671, 647,681, 566784)
waitms(3000) // 3 sec
KEYDOWN(#q)
waitms(10)
KEYUP(#q)
END_IF
SetThread (thr_q, 0)
END_THREAD
-
Снова Здравствуйте! У меня возник такой вопрос - объясняю по рисунку ниже: Зеленые кружочки с определенной скоростью движутся вправо до конца, на пути у них белый квадрат при попадании на который срабатывает if_pixel_in и через 3 секунды должна нажаться кнопка Q, потому-что чтобы кружочку добраться от белого до черного квадрата нужно 3 секунды, и thread еще не закончил свою работу но на белый квадрат наступил еще один кружочек и получается что он из за этого не нажмётся. Вопрос в этом и заключается, как мне это сделать? Есть догадки засунуть thread в thread но тут я путаюсь или засунуть getscreen в отдельный thread(если так можно) будут ли последующие потоки с if_pixel_in использовать обновленный getscreen из другого потока? Или же подскажите свою версию как это реализовать
Создавай очередь из шаров. Попал шар в зону определения - запиши в массив время прихода. Попал новый - его время в очередь.
А другой цикл проверяет очереди и если одно из значений вышло жмакаем.
Только мне кажется у них скорость движения может измениться. Как подстраивать будешь?
И почему 3 сек? Сделай белую область перед самой красной. Там нажатия вроде уже засчитывают.
Ида, а как ты собираешься удерживать длинные... шары? :)
-
Создавай очередь из шаров. Попал шар в зону определения - запиши в массив время прихода. Попал новый - его время в очередь.
А другой цикл проверяет очереди и если одно из значений вышло жмакаем.
Только мне кажется у них скорость движения может измениться. Как подстраивать будешь?
И почему 3 сек? Сделай белую область перед самой красной. Там нажатия вроде уже засчитывают.
Ида, а как ты собираешься удерживать длинные... шары? :)
Я в массивах вообще ноль( если вам не трудно натолкните меня. Скорость шаров не меняется, 3 секунды потому что если дальше ловить if_pixel_in, там на заднем фоне много цветов и этих и других, поэтому минимум нужно на таком расстоянии
-
конечно можно и с массивами, но мне почемуто первое что пришло в голову, это разделить на потоки нажатия кнопок и проверять какой из них свободен.
WHILE(1)
GETSCREEN
IF_PIXEL_IN(618,671, 647,681, 566784)
IF($s1=0)
SetThread (s1, 1)
ELSE
IF($s2=0)
SetThread (s2, 1)
ELSE
IF($s3=0)
SetThread (s3, 1)
ELSE
print("все потоки заняты, нужно еще")
END_IF
END_IF
END_IF
END_IF
waitms(10)
END_CYC
///////////////////////////////////////
THREAD(s1, 0)
$s1=1
wait(3)
KEYDOWN(#q)
waitms(10)
KEYUP(#q)
$s1=0
SetThread (s1, 0)
END_THREAD
THREAD(s2, 0)
$s2=1
wait(3)
KEYDOWN(#q)
waitms(10)
KEYUP(#q)
$s2=0
SetThread (s2, 0)
END_THREAD
THREAD(s3, 0)
$s3=1
wait(3)
KEYDOWN(#q)
waitms(10)
KEYUP(#q)
$s3=0
SetThread (s3, 0)
END_THREAD
если твоих шаров будет тьма тмущяя и их(потоков) небудет хватать, нестесняйся, добовляй еще.