Deutsches AutoHotkey Homepage AutoHotkey Community
Wir helfen uns gegenseitig aus der Patsche
 
 FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   RegistrierenRegistrieren 
 ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin 

Bewegungsrichtung (2D) mit Pixelsearch berechnen?
Gehe zu Seite Zurück  1, 2
 
Neues Thema eröffnen   Neue Antwort erstellen    AutoHotkey Community Foren-Übersicht -> Ich brauche Hilfe!
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
DerRaphael



Anmeldedatum: 09.01.2008
Beiträge: 883
Wohnort: Zuhause

BeitragVerfasst am: Do Mai 15, 2008 3:56 pm    Titel: Antworten mit Zitat

BoBo² hat Folgendes geschrieben:
Ternär hab ich den if-clause nicht hinbekommen Mad


sollte so gehen:

Code:
If (XOperator = 1) OR InStr(XPos,"-")
    XPos += 1
  Else
    XPos -= 1
  If (YOperator = 1) OR InStr(YPos,"-")
    YPos += 1
  Else
    YPos -= 1
   
ist dasselbe wie

  XPos := XPos + (((XOperator) || (XPos<0)) ? 1 : -1 )
  YPos := YPos + (((YOperator) || (YPos<0)) ? 1 : -1 )
 


(nicht getestet)

grüße
derRaphael
_________________
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Z Gecko
Gast





BeitragVerfasst am: Do Mai 15, 2008 5:13 pm    Titel: Antworten mit Zitat

Ich würde, genau wie Bobo, gerne noch ein paar Details zu der Aufgabe hören.
Und ein paar Beispiel-Bilder sehen. An solchen Bildern könnte man die verschiedenen Methoden auch mal gegeneinander Testen.
Ich schätze mal, je größer das Objekt im Verhältnis zum Suchradius ist, desto günstiger wäre eine gerasterte PixelGetColor Funktion. Pixelsearch in Spalten wir um so günstiger, je kleiner das Objekt ist.
Nach oben
BoBo²
Gast





BeitragVerfasst am: Fr Mai 16, 2008 1:19 pm    Titel: Antworten mit Zitat

Hier schon wie angedroht eine DllCall() Version Cool
Resourcenverbrauch quasi '0' Very Happy
Code:
 -- Rechtshinweis: Der Dll-part des Scripts wurde von Sean gesriptet. --

#Persistent
OnExit, Bye
CoordMode, Pixel, Screen
SetTimer, RunningPoint, 1

MouseGetPos, MPosX, MPosY ; 'Punkt' an Mausposition plazieren
XPos := MPosX
YPos := MPosY

RunningPoint:
    Random, XOperator, 1, 2
    Random, YOperator, 1, 2

    If (XOperator = 1) OR InStr(XPos,"-")
      XPos += 2
    Else
      XPos -= 2
    If (YOperator = 1) OR InStr(YPos,"-")
      YPos += 2
    Else
      YPos -= 2
    hRgn := DllCall( "CreateEllipticRgn", Int, XPos, Int, YPos, Int, XPos+8, Int, YPos+8)
    hBr  := DllCall( "CreateSolidBrush", UInt, 0x0000FF )
    hDC  := DllCall( "GetDC", UInt,0 )
    DllCall( "FillRgn", UInt,hDC, UInt,hRgn, UInt,hBr )
    DllCall("ReleaseDC", "uint", 0, "uint", hDC)
    DllCall("DeleteObject", UInt,hBr)
    Sleep 20
    DllCall("RedrawWindow", "Uint", 0, "Uint", 0, "Uint", hRgn, "Uint", 0x81)
    DllCall("DeleteObject", UInt,hRgn)
    Return
   
Bye:
    DllCall("RedrawWindow", "Uint", 0, "Uint", 0, "Uint", hRgn, "Uint", 0x81)
    DllCall("DeleteObject", UInt,hRgn)
    ExitApp
Nach oben
ChiLLed
Gast





BeitragVerfasst am: Fr Mai 16, 2008 11:49 pm    Titel: Antworten mit Zitat

Um eure Fragen zu beantworten. Es handelt sich nicht um ein Spiel im besonderen, vielmehr versuche ich allgemein einen "aimbot" für klar identifizierbare Objekte aufstellen (das so etwas z.B in Counterstrike nutzlos ist dürfte klar sein).

Dein Ansatz ist interessant, allerdings passt es nicht ganz zu meinen Vorstellungen. Den ganzen Bildschirm abzuscannen ist nicht mein Ziel, jedenfalls bin ich dann nämlich dazu gezwungen zB mehrere Ziele zu unterscheiden (am leichtesten durch Entfernung von der Maus).
Ausserdem erschwert es ungemein die Bewegungsrichtung erkennung.

Ich hoffe ihr regt euch nicht über ein wenig Kritik auf. Anstatt verschiedene Ansätze aufzustellen wie es gehen oder "besser" gehen könnte, hättet ihr vll euch mal auf meine Probleme bzw. Fragen konzentrieren können. Ich habe hier Hilfe für mein Problem gesucht und dieses auch Klar hier formuliert. Ihr helft zwar, allerdings redet ihr an mir vorbei.

Zitat:
Wie mache ich jetzt einen Loop der mir bei jedem Durchlauf zwei neue Variablen herausgibt (und natürlich diese neuen Koordinaten für den nächsten Durchlauf benutzt)? (x1,y1; x2,y2; ....)
Nach oben
Z Gecko
Gast





BeitragVerfasst am: So Mai 18, 2008 1:34 pm    Titel: Antworten mit Zitat

mit pixelsearch sieht das ungefähr so aus:
Code:
setbatchlines -1
X1 := 1
X2 := 100
Y1 := 1
Y2 := 100
ColorID := 0x000000
yloop := Y2 - Y1
loop, %yloop%
{
   X1temp := X1
   Y := A_Index + Y1
   loop
   {
      PixelSearch, OutputVarX, , %X1temp%, %Y%, %X2%, %Y%, %ColorID%, 5
      if ErrorLevel = 0
      {   
         matchx += OutputVarX
         matchy += Y
         match ++
         found%match%x := OutputvarX
         found%match%y := Y
         X1temp := OutputVarX + 1
      }
      else
         break
      if ( X1temp >= X2 )
         break
   }
}
matchx := matchx / match
matchy := matchy / match
ListVars
MsgBox, %match% Matches. Average: x %matchx% - y %matchY%
Nach oben
ChiLLed
Gast





BeitragVerfasst am: Di Mai 20, 2008 8:21 am    Titel: Antworten mit Zitat

ich fahre in 3 Stunden nach Spanien, deswegen müssen wir diese Diskussion ein wenig vertagen. Bis nächste Woche Smile
Nach oben
ChiLLed
Gast





BeitragVerfasst am: Do Jun 05, 2008 7:31 pm    Titel: Antworten mit Zitat

So, ich bin zurück und der ganze andere Stress is auch dahin.
Ich werde im laufe des Abends mal eine komplizierte unoptimierte Version meiner Idee umsetzten. Die Raster/Spalten Suche gefällt mir nach wie vor nicht, könnte aber vll noch nützlich werden wenn es darum geht den Ganzen Bildschirm nach zb. mehreren Zielen abzusuchen.

Später mehr.
Nach oben
ChiLLed
Gast





BeitragVerfasst am: Fr Jun 06, 2008 2:16 am    Titel: Antworten mit Zitat

Eine erste Umsetzung


Code:
f:: 
MouseGetPos, PosX, PosY
xa1 := PosX - 50
xa2 := PosX + 50
ya1 := PosY - 50
ya2 := PosY + 50
Pixelsearch, FX1, FY1, %xa1%, %ya1%, %xa2%, %ya2%, 0x0000CD, 50, Fast ;hier wird das erste mal anvisiert
MouseMove, %FX1%, %FY1%
Sleep, 50
xb1 := FX1 - 10
yb1 := FY1 - 10
xb2 := FX1 + 10
yb2 := FY1 + 10
Pixelsearch, FX2, FY2, %xb1%, %yb1%, %xb2%, %yb2%, 0x0000CD, 50, Fast ;jetzt werden 20 punkte ermittelt und das ziel gelocked...das hätte ich lieber in einer schleife umgesetzt ^^
MouseMove, %FX2%, %FY2%
Sleep, 50
xb1 := FX2 - 10
yb1 := FY2 - 10
xb2 := FX2 + 10
yb2 := FY2 + 10
Pixelsearch, FX3, FY3, %xb1%, %yb1%, %xb2%, %yb2%, 0x0000CD, 50, Fast
MouseMove, %FX3%, %FY3%
Sleep, 50
xb1 := FX3 - 10
yb1 := FY3 - 10
xb2 := FX3 + 10
yb2 := FY3 + 10
Pixelsearch, FX4, FY4, %xb1%, %yb1%, %xb2%, %yb2%, 0x0000CD, 50, Fast
MouseMove, %FX4%, %FY4%
Sleep, 50
xb1 := FX4 - 10
yb1 := FY4 - 10
xb2 := FX4 + 10
yb2 := FY4 + 10
Pixelsearch, FX5, FY5, %xb1%, %yb1%, %xb2%, %yb2%, 0x0000CD, 50, Fast
MouseMove, %FX5%, %FY5%
Sleep, 50
xb1 := FX5 - 10
yb1 := FY5 - 10
xb2 := FX5 + 10
yb2 := FY5 + 10
Pixelsearch, FX6, FY6, %xb1%, %yb1%, %xb2%, %yb2%, 0x0000CD, 50, Fast
MouseMove, %FX6%, %FY6%
Sleep, 50
xb1 := FX6 - 10
yb1 := FY6 - 10
xb2 := FX6 + 10
yb2 := FY6 + 10
Pixelsearch, FX7, FY7, %xb1%, %yb1%, %xb2%, %yb2%, 0x0000CD, 50, Fast
MouseMove, %FX7%, %FY7%
Sleep, 50
xb1 := FX7 - 10
yb1 := FY7 - 10
xb2 := FX7 + 10
yb2 := FY7 + 10
Pixelsearch, FX8, FY8, %xb1%, %yb1%, %xb2%, %yb2%, 0x0000CD, 50, Fast
MouseMove, %FX8%, %FY8%
Sleep, 50
xb1 := FX8 - 10
yb1 := FY8 - 10
xb2 := FX8 + 10
yb2 := FY8 + 10
Pixelsearch, FX9, FY9, %xa1%, %ya1%, %xa2%, %ya2%, 0x0000CD, 50, Fast
MouseMove, %FX9%, %FY9%
Sleep, 50
xb1 := FX9 - 10
yb1 := FY9 - 10
xb2 := FX9 + 10
yb2 := FY9 + 10
Pixelsearch, FX10, FY10, %xb1%, %yb1%, %xb2%, %yb2%, 0x0000CD, 50, Fast
MouseMove, %FX10%, %FY10%
Sleep, 50
xb1 := FX10 - 10
yb1 := FY10 - 10
xb2 := FX10 + 10
yb2 := FY10 + 10
Pixelsearch, FX11, FY11, %xb1%, %yb1%, %xb2%, %yb2%, 0x0000CD, 50, Fast
MouseMove, %FX11%, %FY11%
Sleep, 50
xb1 := FX11 - 10
yb1 := FY11 - 10
xb2 := FX11 + 10
yb2 := FY11 + 10
Pixelsearch, FX12, FY12, %xb1%, %yb1%, %xb2%, %yb2%, 0x0000CD, 50, Fast
MouseMove, %FX12%, %FY12%
Sleep, 50
xb1 := FX12 - 10
yb1 := FY12 - 10
xb2 := FX12 + 10
yb2 := FY12 + 10
Pixelsearch, FX13, FY13, %xb1%, %yb1%, %xb2%, %yb2%, 0x0000CD, 50, Fast
MouseMove, %FX13%, %FY13%
Sleep, 50
xb1 := FX13 - 10
yb1 := FY13 - 10
xb2 := FX13 + 10
yb2 := FY13 + 10
Pixelsearch, FX14, FY14, %xb1%, %yb1%, %xb2%, %yb2%, 0x0000CD, 50, Fast
MouseMove, %FX14%, %FY14%
Sleep, 50
xb1 := FX14 - 10
yb1 := FY14 - 10
xb2 := FX14 + 10
yb2 := FY14 + 10
Pixelsearch, FX15, FY15, %xb1%, %yb1%, %xb2%, %yb2%, 0x0000CD, 50, Fast
MouseMove, %FX15%, %FY15%
Sleep, 50
xb1 := FX15 - 10
yb1 := FY15 - 10
xb2 := FX15 + 10
yb2 := FY15 + 10
Pixelsearch, FX16, FY16, %xb1%, %yb1%, %xb2%, %yb2%, 0x0000CD, 50, Fast
MouseMove, %FX16%, %FY16%
Sleep, 50
xb1 := FX16 - 10
yb1 := FY16 - 10
xb2 := FX16 + 10
yb2 := FY16 + 10
Pixelsearch, FX17, FY17, %xb1%, %yb1%, %xb2%, %yb2%, 0x0000CD, 50, Fast
MouseMove, %FX17%, %FY17%
Sleep, 50
xb1 := FX17 - 10
yb1 := FY17 - 10
xb2 := FX17 + 10
yb2 := FY17 + 10
Pixelsearch, FX18, FY18, %xb1%, %yb1%, %xb2%, %yb2%, 0x0000CD, 50, Fast
MouseMove, %FX18%, %FY18%
Sleep, 50
xb1 := FX18 - 10
yb1 := FY18 - 10
xb2 := FX18 + 10
yb2 := FY18 + 10
Pixelsearch, FX19, FY19, %xb1%, %yb1%, %xb2%, %yb2%, 0x0000CD, 50, Fast
MouseMove, %FX19%, %FY19%
Sleep, 50
xb1 := FX19 - 10
yb1 := FY19 - 10
xb2 := FX19 + 10
yb2 := FY19 + 10
Pixelsearch, FX20, FY20, %xb1%, %yb1%, %xb2%, %yb2%, 0x0000CD, 50, Fast
MouseMove, %FX20%, %FY20%
Sleep, 50
xb1 := FX20 - 10
yb1 := FY20 - 10
xb2 := FX20 + 10
yb2 := FY20 + 10
Pixelsearch, FX21, FY21, %xb1%, %yb1%, %xb2%, %yb2%, 0x0000CD, 50, Fast
MouseMove, %FX21%, %FY21%
Sleep, 50 ;alle koords ermittelt, jetzt beginnt die regressionsberechnung
FXsum := FX1 + FX2 + FX3 + FX4 + FX5 + FX6 + FX7 + FX8 + FX9 + FX10 + FX11 + FX12 + FX13 + FX14 + FX15 + FX16 + FX17 + FX18 + FX19 + FX20 + FX21
FYsum := FY1 + FY2 + FY3 + FY4 + FY5 + FY6 + FY7 + FY8 + FY9 + FY10 + FY11 + FY12 + FY13 + FY14 + FY15 + FY16 + FY17 + FY18 + FY19 + FY20 + FY21
FXFYsum := FX1 * FY1 + FX2 * FY2 + FX3 * FY3 + FX4 * FY4 + FX5 * FY5 + FX6 * FY6 + FX7 * FY7 + FX8 * FY8 + FX9 * FY9 + FX10 * FY10 + FX11 * FY11 + FX12 * FY12 + FX13 * FY13 + FX14 * FY14 + FX15 * FY15 + FX16 * FY16 + FX17 * FY17 + FX18 * FY18 + FX19 * FY19 + FX20 * FY20 + FX21 * FY21
FXqrtsum := FX1 * FX1 + FX2 * FX2 + FX3 * FX3 + FX4 * FX4 + FX5 * FX5 + FX6 * FX6 + FX7 * FX7 + FX8 * FX8 + FX9 * FX9 + FX10 * FX10 + FX11 * FX11 + FX12 * FX12 + FX13 * FX13 + FX14 * FX14 + FX15 * FX15 + FX16 * FX16 + FX17 * FX17 + FX18 * FX18 + FX19 * FX19 + FX20 * FX20 + FX21 * FX21
Slope := (21 * FXFYsum - FXsum * FYsum) / (21 * FXqrtsum - FXsum * FXsum) ;slope heisst steigung und ist grob gesagt die bewegungsrichtung
TargetX := FX21 + 200 ;diese koordinaten stellen einen punkt auf der bewegungsrichtung dar, der faktor 200 ist variabel, jenachdem wie weit man vor das ziel zielen will
TargetY := FY21 + 200 * Slope
MouseMove, %TargetX%, %TargetY%
return
Nach oben
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    AutoHotkey Community Foren-Übersicht -> Ich brauche Hilfe! Alle Zeiten sind GMT
Gehe zu Seite Zurück  1, 2
Seite 2 von 2

 
Gehe zu:  
Du kannst Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum antworten.


Powered by phpBB © 2001, 2005 phpBB Group
Deutsche Übersetzung von phpBB.de