Что нового

Запуск функции, функцией

EviLo4ek

Новичок
Сообщения
9
Репутация
3
Добрый день, столкнулся с проблемой:

Имеется некий цикл, который запускает функцию при условии наличия пикселя нужного цвета.
Сама функция будет выполняется когда этого пикселя нет.
Т.Е получается "мертвый круг", а можно ли сделать что-бы выполняемая функция не прерывалась при исчезновении условия её запуска, а выполнялась до конца и лишь затем снова возвращалась к проверке условия цикла в котором она запустилась :stars:? ??

Вот пример:

Код:
While 1
	 $sColorGet = StringLower(Hex(PixelGetColor(635, 65), 6))
	 If $sColorGet == $sColor3 Then 
	   _function()
	 EndIf
 WEnd 

 Func _function()
	$sColorGet = StringLower(Hex(PixelGetColor(635, 65), 6))
        If $sColorGet <> $sColor3 Then 
	   	   Send ("z")
		   Sleep (1000)
         EndIf
 EndFunc


Как заставить нажать "Z", а уже потом вернуться к циклу???? Заранее спасибо!
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,673
Репутация
2,486
Zaramot
С какого это времени ты стал модератором? :scratch:
 

Belfigor

Модератор
Локальный модератор
Сообщения
3,608
Репутация
941
Предупреждение За нарушение правил форума (пункт В.11):
Любые отрывки AutoIt кода необходимо заключать в тег [autoit]
autoit.gif
(подробнее), а обычный код соответственно в тег [code]
code.gif
(подробнее). Также большие выдержки текста помещайте под тег [spoiler]
spoiler.gif
(подробнее), там где это поддерживается естественно. Как в случае с названием темы, также короткое и эргономичное сообщение привлекает больше внимания, и шансы на получение конкретного ответа увеличиваются.


С уважением, ваш Модератор.
 

inververs

AutoIT Гуру
Сообщения
2,135
Репутация
465
Код:
While 1
	;Главный цикл
	If PixelGetColor(635,65) = $sColor3 Then
		Do
			Send("z")
			Sleep(1000)
		Until PixelGetColor(635,65) = $sColor3
	EndIf
WEnd
 
Автор
E

EviLo4ek

Новичок
Сообщения
9
Репутация
3
Очевидно вы меня не поняли. Представьте, что у вас в игре появляется окошко таргета(цели) и в этот момент нажимать кнопку "Z" нельзя, как только окно цели пропадает(цель мертва) надо нажать "Z" допустим 5 раз.

У меня выходит, либо:
1) Жать 5 раз Z пока есть окно цели
2) Жать бесконечное количество раз Z, по 5 раз, пока цели нет.

Надо:
Жать Z 5 раз, после исчезновения цели и останавливаться в ожидании её появления, после чего поновой.

Мне это нужно для сбора лута, после смерти моба я собираю лут в течении какого-то времени а не бесконечно, пока появиться новый (как в вашем примере выше), вернее там у вас лут собираеться пока есть моб.

Уже голову сломал =)))) Ничего не выходит.
 

ggzgamer

Осваивающий
Сообщения
134
Репутация
23
Из описания проблемы складывается впечатление, что сам автор темы не знает что хочет.
Код:
While 1
	If Then ; условие проверки наличия цели
		While 1
			If Then ; проверка исчезновения цели
				For $i=1 To 5 Step 1
					Sleep(500)
					Send('z')
				Next
				ExitLoop
			EndIf
		WEnd
	EndIf
	Sleep(100)
WEnd
 
Автор
E

EviLo4ek

Новичок
Сообщения
9
Репутация
3
Код:
Global  $sColor2, $sColorGet2, $i
$sColor2 = '1bd807'

While 1
   $sColorGet2 = StringLower(Hex(PixelGetColor(635, 65), 6))

        If $sColorGet2 == $sColor2 Then ; условие проверки наличия цели
        While 1
            If $sColorGet2 <> $sColor2 Then  ; проверка исчезновения цели
                For $i=1 To 5 Step 1
                    Sleep(500)
                    Send("z")
                Next
                ExitLoop
            EndIf
        WEnd
    EndIf
    Sleep(100)
WEnd


Ваш вариант не работает...
 

ggzgamer

Осваивающий
Сообщения
134
Репутация
23
Действительно не будет, потому что это всего набросок циклов, которые при работе должны получать цвет в координате. Поэтому необходимо и во втором цикле использовать функцию получения цвета, а не использовать предыдущее значение из прошлого цикла.

И не надо объявлять глобальную переменную $i

Код:
Global  $sColor2, $sColorGet2
$sColor2 = '1bd807'

While 1
	$sColorGet2 = StringLower(Hex(PixelGetColor(635, 65), 6))

        If $sColorGet2 == $sColor2 Then ; условие проверки наличия цели
		While 1
			$sColorGet2 = StringLower(Hex(PixelGetColor(635, 65), 6))
			If $sColorGet2 <> $sColor2 Then  ; проверка исчезновения цели
                For $i=1 To 5 Step 1
                    Sleep(500)
                    Send("z")
                Next
                ExitLoop
            EndIf
			Sleep(100)
        WEnd
    EndIf
    Sleep(100)
WEnd
 
Автор
E

EviLo4ek

Новичок
Сообщения
9
Репутация
3
ggzgamer, спасибо тебе огромное, теперь все работает!
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,673
Репутация
2,486
EviLo4ek [?]
теперь все работает!

[info border=#0000ff float=left]На форуме принято помечать тему решенной после получения ответа на свой вопрос!
Вверху или внизу темы нажмите на ссылку такого вида:
package_old.gif
Тема не решена
[/info]
 
Верх