Problem mit Robot Class & Counter

08/09/2016 19:41 fUtANg.#1
Hey,
entweder hat mein Gehirn grade nen Blackout oder mein Wissen reicht einfach noch nicht.

Versuche derzeit einen Counter zu erstellen, welcher immer um eins hoch geht, wenn ein (oder mehrere) besagter Pixel schwarz ist.
Ich nutze dazu die Robot Class:
Code:
robot.getPixelColor(x, y);
Jedoch zählt er bis ins unendliche, so lange der Pixel schwarz ist.

Hättet ihr eine Idee oder könntet mir auf die Sprünge helfen?


Danke. :)
08/09/2016 20:25 KingDingD0ng#2
Quote:
Originally Posted by fUtANg. View Post
Hey,
entweder hat mein Gehirn grade nen Blackout oder mein Wissen reicht einfach noch nicht.

Versuche derzeit einen Counter zu erstellen, welcher immer um eins hoch geht, wenn ein (oder mehrere) besagter Pixel schwarz ist.
Ich nutze dazu die Robot Class:
Code:
robot.getPixelColor(x, y);
Jedoch zählt er bis ins unendliche, so lange der Pixel schwarz ist.

Hättet ihr eine Idee oder könntet mir auf die Sprünge helfen?


Danke. :)
Robot class?
Sagt mir jetzt nichts.

Wieso nutzt du nicht einfach -> [Only registered and activated users can see links. Click Here To Register...])


Hier auch gleich meine Ergebnisse nach 10 Sekunden googlen.
[Only registered and activated users can see links. Click Here To Register...]
08/09/2016 20:26 fUtANg.#3
Danke! Ich schau es mir mal an.
08/09/2016 20:30 EngelEatos#4
Quote:
Originally Posted by KingDingD0ng View Post
Robot class?
Sagt mir jetzt nichts.
[Only registered and activated users can see links. Click Here To Register...]

Zum Problem, die robot class erkennt also, dass der Pixel schwarz ist?
Der Counter ist nur falsch, das würde daraufhin weisen, das etwas anderes mit deinem Code nicht stimmt. Könntest du den Ausschnitt, um den es hier geht, posten?
08/09/2016 20:43 fUtANg.#5
Ja, die Pixelerkennung ist kein Problem.

Code:
public boolean f = false;
	public static int c = 0;

   void counter() throws AWTException{
    	
   	 Robot Robo = new Robot();
   	 
   	 Color Pixel = Robo.getPixelColor(900, 900);
   	 Color b = new Color(0,0,0);
   	 
   	 while(Pixel.equals(b)){
   		 c = c ++;
   		System.out.println(fightInfo.c);
   	 }
Das ist leider alles was noch übrig geblieben ist, Lösungansätze wurden leider vor Verzweiflung gelöscht. Mir ist bewusst, dass der Counter garnicht anders kann als gnadenlos hochzählen bei dem Code. Hatte es bereits versucht mit einem boolean, welcher am Ende die Schleife verweigert.

Mittlerweile denke ich aber, dass eine Schleife dazu ungeeignet ist. Wie gesagt, habe heute irgendwie nen Blackout und bin noch nicht der erfahrenste Programmierer. :/
08/09/2016 21:49 EngelEatos#6
was willst du denn machen?

Ändert sich der Pixel auch noch, ansonsten ist es doch logisch, das der Counter weiterzählt.

Wenn du nur einmal schauen willst, ob der Pixel schwarz ist:
Code:
If(Pixel.equals(b)) {
    c += 1;
}
Wenn du immer wieder nach einer bestimmten Zeit prüfen willst, ob der Pixel schwarz ist, solltest du dir die Timer-Class von Java anschauen.
([Only registered and activated users can see links. Click Here To Register...])
08/09/2016 21:56 fUtANg.#7
Einen Counter, der immer um eins hoch zählt wenn der bestimmte Pixel schwarz ist. Wenn er einmal schwarz ist soll das Programm warten bis der Pixel nicht mehr schwarz ist, wenn der Pixel danach erneut schwarz wird, soll es erneut +1 rechnen. Und so weiter...

Mein Problem ist es, dass ich es nicht hinkriegt wann der Counter hoch zählen soll und wann nicht.
08/09/2016 22:08 .Scy#8
was soll denn für die farb änderung sorgen? man baut, außer in spezialfällen, niemals eine endlosschleife, was genau das ist was du dort getan hast. wenn der pixel 900/900 immer schwarz ist, dann läuft dein programm unendlich.

wenn du auf änderungen an dem pixel warten willst, versuch einen listener zu erstellen, welcher auf diese änderung reagiert.
08/09/2016 22:29 EngelEatos#9
So würde dein Code funktionieren, davon ist aber, wie bereits von .Scy gesagt, aufgrund der Endlosschleife abzuraten. Der beste Lösungansatz ist der von .Scy angesprochene Listener.

Code:
Boolean dontcount = false;
Robot robot = new Robot();
while (true) {
    if(robot.getPixelColor(900, 900).equals(b)){
        if(dontcount == false){
            c+=1;
            dontcount = true;
            System.out.println(c);
        }
    } else {
        dontcount = false;
    }
}
08/09/2016 22:37 fUtANg.#10
Danke euch zwei, ich les mich mal in den Listener ein und versuche mich anschließend nochmal.
08/10/2016 23:08 fUtANg.#11
Blicke da irgendwie nicht durch wie ich das machen soll. :/

Wie kann ich einen Listener erstellen, der reagiert wenn Pixel 900,900 schwarz ist und sich immer und immer wieder auslösen lässt?
08/11/2016 15:54 fUtANg.#12
Kann dicht gemacht werden.