Gå til innhold

[python] Musebevegelse - bedre fremgangsmåte?


Anbefalte innlegg

Heisann! Jeg har laget en enkel funksjon for å bevege musen i alle mulige vinkler. Fremgangsmåten jeg bruker er relativt "manneskelik". Ved enkelt dele nåverende punkt (wx,wy) på punktet den skal til (x,y) for hver repitisjon (loop). Jeg runder av til nermeste hele tall. På denne måten skaper jeg en bevegelse med C-mønster eller S-mønster (kommer ann på vinkel, - såvidt synelig). Hastigheten vil også øke og minke, da pixel-hoppet vil variere fra 1 og 1 pixel til "max" lengde (wx til x/wy til y), - dette kommer også ann på vinkel.

 

Nå lurer jeg på om jeg kan få til noe lignende ved å bruke en enkel pythonisk algoritme for å gjøre scriptet enkelere. Ønsker egentlig bare å slippe unne alle if/else, det er uoversiktelig, og gir meg dermed liten kontroll.

 

Nåverende kode:

def Move(x,y):
wx, wy = win32api.GetCursorPos()
while (wx != x) or (wy != y):
	if(y>wy) and (x>wx): px, py = x-wx, y-wy
	elif(y<wy) and (x>wx): px, py = x-wx, wy-y
	elif(y<wy) and (x<wx): px, py = wx-x, wy-y
	elif(y>wy) and (x<wx): px, py = wx-x, y-wy

	elif(y>wy) and (x==wx): px, py = x, y-wy
	elif(y<wy) and (x==wx): px, py = x, wy-y
	elif(x<wx) and (y==wy): px, py = x-wx, y
	elif(x>wx) and (y==wy): px, py = wx-x, y

	if(px>py) and px!=0 and py!=0: ax,ay=int(round(px/py)), 1 #ukjent vinkel
	elif(px<py) and px!=0 and py!=0: ay,ax=int(round(py/px)), 1 #ukjent vinkel
	elif(px==py or px==0 or py==0):ay,ax=1, 1 #45 grader, eller ingen vinkel

	if(wx<x): wx = wx+ax
	if(wy<y): wy = wy+ay
	if(wx>x): wx = wx-ax
	if(wy>y): wy = wy-ay

	win32api.SetCursorPos((wx,wy))
	waitR(0,0.002)

Endret av warpie
  • Liker 1
Lenke til kommentar
Videoannonse
Annonse

Har du forsøkt med bezier-kurver? Disse kan så vidt jeg har forstått skaleres, og ser ut til å kunne rerpresenteres ganske greit (om en bare får satt seg inn i hvordan de brukes. ;_; )

 

Altså - En kan jo generere en liste over koordinater som musen skal innom, og bruke SetCursorPos på hver av disse med eventuelle pauser imellom hver posisjon. Problemet blir jo da å lage denne listen.

 

http://en.wikipedia.org/wiki/Bézier_curve

 

http://www.ablestable.com/play/bezier/index.htm

 

 

 

Jeg holder egentlig på med noe av det samme, men jeg forsøker å gjøre det så menneskelikt som mulig (om jeg så må ha grusomt mange if-blokker).

 

Har lagret en haug av bevegelser både som bilder og lister over koordinater, forsøker å finne en måte å generalisere utifra dette på.

 

 

hbdsg.png

 

 

Endret av Yumekui
  • Liker 1
Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...