Robot zu langsam

MrTerry

Mitglied
Hallo

kurze Frage:

Ich progg nen Bot für so ein Spiel, bei dem man mit der Maus nen Weg langlaufen muss.

mein Algorithmus funktioniert!

Das Problem ist, dass bei höherem Level das Spiel zu schnell scrollt und der Robot ein Tick
zu langsam ist.

Ich würde gerne irgendwo etwas Zeit einsparen wollen und hab aber leider keinen Plan mehr, was ich noch versuchen soll!

Kann mir da einer helfen? (evt. beim Screenshot oder pixelauswertung eine Idee, wie es schneller geht?)

x,y sind Koordinaten, wobei x so gut wie nie verändert werden soll;

frei, weg,ziel und weg2 etc sind integer und bekommen einen Farbwert in int-form

also wie gesagt, ich will nur Zeit einsparen, denn der Algorithmus funktioniert (und ich bin mir bewusst, dass die Namen nicht optimal sind)


vielen Dank schonmal im vorraus!
Terry

Java:
 public static void Lvl() {
		robot.mousePress(InputEvent.BUTTON1_MASK);
		robot.mouseRelease(InputEvent.BUTTON1_MASK);
		robot.mouseMove(100,560);
		
		int x =100;
		int y =560;
		boolean laufen = true;
		Dimension dim = Toolkit.getDefaultToolkit().getScreenSize();
		Rectangle screenRect = new Rectangle(dim);
                BufferedImage bimage = robot.createScreenCapture(screenRect);

		while (laufen) {
			dim = Toolkit.getDefaultToolkit().getScreenSize();
			screenRect = new Rectangle(dim);
			bimage = robot.createScreenCapture(screenRect);
			int weg2 = bimage.getRGB(x+29,y);
			int freiH = bimage.getRGB(x,y-30);
			int freiU = bimage.getRGB(x,y+30);
			
			if (weg2 != weg) {
			  System.out.println(weg2+ " "+frei);
			  if (freiU==frei) {
			
			  while (freiH != frei) {
			    y-=30;
			 
			    freiH = bimage.getRGB(x,y-30);
			
			  }
              }
			else
			if (freiH==frei) {
			    while (freiU!= frei) {
			      y+=30;
			      freiU = bimage.getRGB(x,y+30);
			      
			    }
			}
			robot.mouseMove(x,y);
			if (weg2==ziel) {
			  laufen=false;
			}
		
			}
		}
		robot.mouseMove(x+80,y);
	        robot.mousePress(InputEvent.BUTTON1_MASK);
	        robot.mouseRelease(InputEvent.BUTTON1_MASK);
			
		Lvl();
	  }
 

Steev

Bekanntes Mitglied
Guten Abend,

ich weis zwar nicht was der Sinn deines Spieles ist, aber wenn es "nur" darum geht mit der Maus eine bestimmte Strecke abzufahren, dann sind Konstrukte wie robot.mouseMove sowie eine Pixelweise Auswertung eigendlich fehl am platz.

Ich würde einfach errechnen, an welcher Position sich der Mauszeiger befindet, und was die alte Position war. Zwischen den beiden Positionen würde ich eine Linie ziehen und prüfen, ob dazwischen eine Position ungültig war. (Ich nehme an das geht mit farbigen Flächen auf deinem Bild die geprüft werden?)

Edit:
Das schlimmste ist eigendlich, dass du pro Schleifendurchlauf einen Screenshot erzeugst. Da muss die Performance ja in die Knie gehen...
 
Zuletzt bearbeitet:

MrTerry

Mitglied
mir ist schon klar, dass der screenshot das zeitaufwändigste ist

ich habe keinen Einfluss / bzw weiß ich nicht vorher wie der weg ist

und sobald ich den weg verlasse -> nochmal neu anfangen

ausserdem habe ich nur einen screenshot.... es ist quasi ein web spiel (auf javascript basis) und ich versuche da durchzukommen

daher ist die Linie ziehen im prinzip unmöglich ! (wenn ich dich richtig verstanden habe)

trotzdem danke

lg Terry
 

madboy

Top Contributor
Ich würde mal versuchen nicht immer einen Screenshot vom ganzen Bilschirm zu machen. Wenn ich dich richtig verstehe, müsste ein Bereich von 30x30 Pixeln ausreichen.
Ansonsten ist es überflüssig, in Zeile 14 jedes Mal die Bildschirmgröße abzufragen. Ein Mal sollte reichen :)
 

MrTerry

Mitglied
vielen Dank :D

ich war schon echt betriebsblind !

jetzt hat es glücklicherweise funktioniert :)

-- threat closed -- (auch wenn ich das nicht machen kann xD )
 

Ähnliche Java Themen


Oben