kann mir vielleicht einer sagen, ob es möglich ist, mit Pixelsearch nach 2 Farben zu suchen? Also z.B bei einem HP Balken. Wenn der leer ist, dann soll irgendwas passieren. Aber die HP sind nicht nur rot, wie es normalerweise ist. Bei manchen Attacken färbt sich der HP Balken auch schonmal grün und dann erkennt das Programm nicht, dass noch Leben im HP Balken ist, weil es nun nicht mehr rot sondern grün ist und führt das aus, was eigentlich nur passieren sollte, wenn der Balken leer, also das Monster tot ist.
du kannst bei derartigen balken auch per PixelGetColor die farben in einer schleife untersuchen, und gleichzeitig den derzeitigen prozentuellen wert berechnen.
hilfreich hierbei kann es auch sein, auf die hintergrundfarbe, hinter dem "roten balken", zu prüfen, da diese in der regel nicht variiert.
@Botofwar vielen Dank, es klappt. @lolkop Würd mich jetzt schon mal interessieren, wie man den prozentuellen Wert ausrechnet. Könntest du mir das kurz erklären?
@Botofwar vielen Dank, es klappt. @lolkop Würd mich jetzt schon mal interessieren, wie man den prozentuellen Wert ausrechnet. Könntest du mir das kurz erklären?
Du kannst gucken wo der letzte Pixel des Balkens liegt. Dann teilst du die gesamte Länge durch die Position des letzten Pixels und schon hast du die aktuelle Prozentzahl. Am besten prüfst du einen vorderen Pixel und gehst dann schrittweise nach hinten. Um die richtige Performance zu erlangen, müsstest du dannach noch die Schrittlänge anpassen.
#include<GuiConstants.au3>
Opt("PixelCoordMode", 0)
HotKeySet("{ESC}", "_Exit");mit ESC beenden
$gui = GUICreate("test", 400, 250)
$progress = GUICtrlCreateProgress(20, 20, 360, 100);unsere test HP
$button = GUICtrlCreateButton("Start", 20, 190, 100, 20)
$genauigkeit = GUICtrlCreateInput("5", 140, 190, 100, 20);genauigkeit mit der gesucht wird (um so höher die zahl um so ungenauer) da so viele pixel übersprungen werden
GUISetState(@SW_SHOW)
While 1
If GUIGetMsg() = $button Then
GUICtrlSetData($progress, Random(0, 100))
Sleep(300)
If IsNumber($genauigkeit) = 1 Then _pixelsearch()
EndIf
WEnd
Func _pixelsearch()
For $loop = 0 To 360 Step GUICtrlRead($genauigkeit)
$color = PixelGetColor(20 + $loop, 70, $gui);in der mitte des "HP" Balkens wird von links nach rechts nach einem Pixel mit der farbe 0xC9C9C9 gesucht (0xC9C9C9=HEX ist in Dezimal=13224393)
If $color = 13224393 Then
MsgBox(0, "", "HP bei " & (100 / 360) * $loop & "%");Auswertung der Position des Pixels mit der Farbe 13224393
MsgBox(0, "", "Kontrolle HP bei " & GUICtrlRead($progress) & "%" & @CRLF & "Abweichung in % " & GUICtrlRead($progress) - (100 / 360) * $loop);tatsächliche position und abweichung in %
ExitLoop
EndIf
Next
EndFunc ;==>_pixelsearch
Func _Exit()
Exit
EndFunc ;==>_Exit
Okay. Also was bedeutet die Gesamtlänge? Könntest du mir das vielleicht nochmal an nem Beispielsscript deutlicher machen?
angenommen deine hp-bar ist 50 pixel lang. daraus lässt sich ja dann logisch schließen, das 0 pixel 0% entsprechen, und 50 pixel 100%. hierraus lässt sich doch eine einfache verhältnisgleichung aufstellen.
X% zu länge Y verhält sich wie 100% zu länge 50. mathematisch (formal) ausgedrückt:
Code:
X 100
- = ---
Y 50
wobei X für deinen gesuchten prozentwert steht, und Y für die aktuelle länge.
stellt man diese gleichung nach X um, so erhält man:
Ich versteh nicht wie er das dann eintragen soll. Ich mein ein Pixel hat ja x und y koordinate und um die Gesamtlänge auszurechen braucht man ja 2 Pixel. Meint ihr dann mit Gesamtlänge x und y Koordinate oder nur eines der beiden?
die x achse ist ja im grund nichts anderes als eine horizontale linie, linear wachsend von links nach rechts...
demzufolge kannst du dort den x wert, des sich am weitesten "rechts" befindlichen pixels, minus dem des sich am weitesten "links" befindlichen pixels nehmen, und hast die gesamtlänge...
Edit:
zur veranschauung hier nochmal ein screenshot:
Ja okay das versteh ich. Aber ich brauch doch trotzdem noch die Position des HP Balkens oder irre ich mich da? Kann ich die derzeitige Länge auch ausrechnen?
c# pixelsearch HELP 06/30/2012 - .NET Languages - 5 Replies Hi alle,
habe schon gegoogelt, finde aber nichts passendes.
ich habe broblem mit c# und zwar will ich einen c# pixelsearch fram bot machen der im bestimmte position/Bitmap im Form1/Fenster mit einer virtuellen maus auf bestimmte farben wie z.b. auf gelb links click macht und dan SendKeys.SendWait("1"); // Taste 1 sendet.
http://s14.directupload.net/images/111108/temp/to kufuep.png
pixelsearch 12/27/2009 - AutoIt - 11 Replies hi hab mal ne frage
ich hab jetzt mit pixelsearch die coordinaten
ich will aber jetzt das der 50 pixel darunter von den coordinaten hinklickt
wie geht das?
pixelsearch 02/07/2009 - General Coding - 1 Replies gibt es in ner anderen programmiersprache sowas ähnliches wie pixelsearch, nur dass es auch in minimierten fenstern geht? und auch dass man autoit funktionen wie mausbewegungen und keyboad controls im minimierten fenster ausführen kann.
PixelSearch 07/27/2008 - Nostale - 5 Replies hi leute kann mir pls jemand erklären wie man pixelsearch benuzt??