Imagesearch effizienter machen

05/05/2013 05:31 paddygamer#1
Moin,moin

Also zu meinem Problem:
Ich schreibe mal aus laune einen kleinen Bot für ein Flash Game.
Wenn 3 Felder der gleichen Farbe übereinander sind oder nebeneinander, dann soll der Bot dort drauf klicken.
Funktioniert auch soweit.
Allerdings arbeitet der Bot nicht gerade effizient(langsam)


Und irgendiwe gelingt es mir die Imagesearch funktion nicht gleichzeitig ausführen zu lassen(Also das der Bot gleichzeitig nach nebeneinander liegenden Roten,Lilanen,Grünen und Gelben "Steinen" sucht und wenn jeweils eine dieser suchfunktionen einen Positives Result ausspuckt dann dort drauf zu klicken.

Ich bekomme es also nur hin das der Bot alles nach einander verarbeitet also

Suche Rote Steine, wenn gefunden klicke drauf ansonsten suche Lila Steine.
Also im Prinzip arbeitet der Bot in einer art "Stapelverarbeitung"
Bloß es ist auch nicht möglich mehrere Funktionen gleichzeitig zu callen?!
Wäre sehr nice, wenn jemand wüsste ,wie dies trotzdem geht..
Danke schonmal!



Code Snippet:

Code:
Func Lila()
	GUICtrlSetData($Info, "Lila")
 $result=_ImageSearch("Lilax.png",1,$x1,$y1,10)
 If $result=1 Then
 MouseClick("LEFT",$x1,$y1,1,1)
 Call("Lilas")
 else
	Call("Lilas")
 Endif
 EndFunc
 
 
 Func Lilas()
	GUICtrlSetData($Info, "Lilas")
 $result=_ImageSearch("Lilas.png",1,$x1,$y1,10)
 If $result=1 Then
 MouseClick("LEFT",$x1,$y1,1,1)
 Call("Rots")
 else
	Call("Rots")
 Endif
 EndFunc
 
 Func Rots()
	GUICtrlSetData($Info, "Rots")
 $result=_ImageSearch("Rots.png",1,$x1,$y1,10)
 If $result=1 Then
 MouseClick("LEFT",$x1,$y1,1,1)
 Call("Rot")
 else
	Call("Rot")
 Endif
 EndFunc

Zur Erklärung: Rot = Waagerechte Steine, Rots= Senkrechte Steine.
05/05/2013 08:22 Achat#2
Warum benutzt du denn Call, um eine Funktion aufzurufen?
Call("Rot") -> Rot()

Quote:
Originally Posted by paddygamer View Post
Allerdings arbeitet der Bot nicht gerade effizient(langsam)
Und irgendiwe gelingt es mir die Imagesearch funktion nicht gleichzeitig ausführen zu lassen(Also das der Bot gleichzeitig nach nebeneinander liegenden Roten,Lilanen,Grünen und Gelben "Steinen" sucht und wenn jeweils eine dieser suchfunktionen einen Positives Result ausspuckt dann dort drauf zu klicken. [...] Ich bekomme es also nur hin das der Bot alles nach einander verarbeitet also
  • Suchbereich einschränken
  • AutoIt kann nicht mehrere Dinge gleichzeitig machen

MfG
05/05/2013 13:52 paddygamer#3
Quote:
Originally Posted by Achat View Post
Warum benutzt du denn Call, um eine Funktion aufzurufen?
Call("Rot") -> Rot()


  • Suchbereich einschränken
  • AutoIt kann nicht mehrere Dinge gleichzeitig machen

MfG

Okay sehr schön, danke der Antwort schonmal das das so nicht möglich ist.
Ist es denn möglich nach mehreren Pixeln zu suchen,da das ja schneller geht
Also im Prinzip

If PixelRot liegt rechts neben PixelDunkelrot
Dann klicke auf PixelRot?
05/05/2013 13:58 Achat#4
Du kannst die Ausführungszeit des Pixel Befehls um den Faktor 1000 beschleunigen, in dem du zurück auf das Windows 2k Design wechselst.

MfG
05/05/2013 14:27 Croco™#5
Code:
Func _EnableDisableAero($bEnable = True) ;True/False
	Local $aDll = DllCall($hDwmApiDll,"int","DwmEnableComposition","int",$bEnable)
	If @error Then Return SetError(@error,0,0)
	Return $aDll[0]
EndFunc
Damit kannst du das Aero Design ausschalten und alles wird um einiges schneller ;)
05/05/2013 15:00 Achat#6
Code:
For $ia = 0 To 1
	_EnableDisableAero($ia)
		$hTimer = TimerInit()
	For $i = 0 To 1000
		PixelGetColor(500,500)
	Next
	MsgBox(0x40040, 0, Round(TimerDiff($hTimer) / 1000,4) & 'ms per pixelgetcolor' & @CRLF & 'Aero enabled: ' & $ia)
Next

_EnableDisableAero(1)

Func _EnableDisableAero($bEnable = True) ;True/False
	Local $aDll = DllCall('dwmapi.dll', "int", "DwmEnableComposition", "int", $bEnable)
	If @error Then Return SetError(@error, 0, 0)
	Return $aDll[0]
EndFunc   ;==>_EnableDisableAero
[Only registered and activated users can see links. Click Here To Register...]
[Only registered and activated users can see links. Click Here To Register...]

Die Zahlen sprechen für sich ;)

Danke für die Funktion (h) (hug) :* (inlove)

MfG