Input/Output KeyListener funktioniert auf Laptop nicht allerdings auf Tower-PC

Gfreak23

Mitglied
Hallo zusammen!

Vorweg: Ich schreibe meinen ersten Beitrag hier und bin quasi noch im Anfangsstudium von Java
Außerdem hab ich die SuFu bereits benutzt.

Im Titel steht es bereits, mein KeyListener funktioniert am Tower-PC aber nicht auf meinem Laptop.

Java:
import ch.aplu.turtle.*;
import java.awt.Color;
import java.awt.event.*;

class TurtleRacer extends TurtleFrame
{
    private Turtle Jascha;
    private Turtle Jann;
    private Turtle kol;
    private Turtle Feld;
    public void TurtleRacer()
    {
        addKeyListener(new KeyAdapter()
            {  
                public void keyPressed(KeyEvent e)
                {
                    switch(e.getKeyCode())
                    {
                        case KeyEvent.VK_LEFT:
                        Jann.setHeading(Jann.heading() - 90);
                        break;

                        case KeyEvent.VK_RIGHT:
                        Jann.setHeading(Jann.heading() + 90);
                        break;

                        case KeyEvent.VK_D:
                        Jascha.setHeading(Jascha.heading() + 90);
                        break;

                        case KeyEvent.VK_A:
                        Jascha.setHeading(Jascha.heading() - 90);
                        break;

                        case KeyEvent.VK_R:
                        Feld.clean(Color.black);

                        Jascha.setPos(-50,0);
                        Jann.setPos(50,0);

                        double hindernis = Math.random() * 3;
                        if(hindernis < 3 & hindernis > 2)
                        {
                            Hindernis();
                            Hindernis();
                            Hindernis();
                        } else if(hindernis < 2 & hindernis > 1)
                        {
                            Hindernis();
                            Hindernis();
                        }else if(hindernis < 1)
                        {
                            Hindernis();
                        }
                        break;
                    }
                }
            });
        Jascha = new Turtle(this, Color.orange);
        Jann = new Turtle(this, Color.red);
        kol = new Turtle(this, Color.blue);
        Feld = new Turtle(this, Color.black);

        Jann.speed(-1);
        Jascha.speed(-1);

        Jascha.setPenColor(Color.orange);
        Jascha.setPos(-50,0);
        Jascha.penWidth(5);
        Jascha.wrap();

        Jann.setPenColor(Color.red);
        Jann.setPos(50,0);
        Jann.penWidth(5);
        Jann.wrap();

        kol.penUp();
        kol.hideTurtle();
        kol.speed(-1);
        kol.wrap();

        Feld.penUp();
        Feld.hideTurtle();
        Feld.setFillColor(Color.black);
        Feld.fill();
        Feld.penWidth(5);
        Feld.setPenColor(Color.yellow);

        double hindernis = Math.random() * 3;
        if(hindernis < 3 & hindernis > 2)
        {
            Hindernis();
            Hindernis();
            Hindernis();
        } else if(hindernis < 2 & hindernis > 1)
        {
            Hindernis();
            Hindernis();
        }else if(hindernis < 1)
        {
            Hindernis();
        }
        addStatusBar(40);
        setStatusText("LASSET DIE SPIELE BEGINNEN!");
        play();
    }

    public void play()
    {  
        boolean play = true;
        while(play = true)
        {
            int koljascha;
            kol.setPos(Jascha.getX(),Jascha.getY());
            kol.setHeading(Jascha.heading());
            kol.fd(4);
            if(kol.getPixelColor().equals(Color.orange) || kol.getPixelColor().equals(Color.red) || kol.getPixelColor().equals(Color.yellow))
            {
                koljascha=1;
            } else {
                koljascha=0;
            }
            System.out.println(koljascha);

            int koljann;
            kol.setPos(Jann.getX(),Jann.getY());
            kol.setHeading(Jann.heading());
            kol.fd(4);
            if(kol.getPixelColor().equals(Color.orange) || kol.getPixelColor().equals(Color.red) || kol.getPixelColor().equals(Color.yellow))
            {
                koljann = 1;
            } else {
                koljann = 0;
            }
            System.out.println(koljann);

            if(koljann == 1 || koljascha == 1)
            {
                play = false;
                if(koljann == 1 & koljascha == 1)
                {
                    addStatusBar(40);
                    setStatusText("Unentschieden!!");
                }else if(koljann == 1)
                {
                    addStatusBar(40);
                    setStatusText("Jann hat verloren!");
                } else {
                    addStatusBar(40);
                    setStatusText("Jascha hat verloren!");
                }

            } else {
                Jascha.fd(5);
                Jann.fd(5);
            }
        }

    }

    private void Hindernis()
    {
        double d = Math.random() * 360;
        double x = Math.random() * 400;
        double y = Math.random() * 400;

        if(d <= 360 & d > 270)
        {
            Feld.setHeading(270);
        } else if(d <= 270 & d > 180)
        {
            Feld.setHeading(180);
        }else if(d <= 180 & d > 90)
        {
            Feld.setHeading(90);
        }else{
            Feld.setHeading(0);
        }
        Feld.setX(x - 200);
        Feld.setY(y - 200);

        Feld.penDown();
        Feld.fd(20);
    }
}

Wahrscheinlich etwas lang und nicht gut formatiert aber ich bitte dies zu entschuldigen! ;-)

TurtleFrame ist quasi ein JFrame und der KeyListener funktioniert theoretisch auch, halt nicht auf meinem Laptop.

Meine Frage währe: warum?

Mit freundlichen Grüßen
Gfreak23

P.S.: Hier ein Link zum "Turtle"-Paket: http://www.aplu.ch/home/download/aplujar5.zip
 
Moin,

mal so ins Blaue geschossen:
vermutlich müssen VK_LEFT und VK_RIGHT auf einem Laptop anders angesprochen/benannt werden!

Wird ähnlich sein wie zwischen 'normalen' Zifferntasten und dem externen Ziffernblock - auch da ist VK_5 nicht gleich VK_5 !!

Kann es abernicht verifizieren, da ich nicht Laptops arbeite !

Gruß
Klaus
 
Guten Morgen

Auf beiden Systemen ist die gleiche Java Version installiert?

Ja auf beiden System das neuste Update.


Definiere "funktioniert nicht"!

Also ich programiere ja hiermit Spielfiguren, die sich drehen sollen auf Tastendruck.
Mit A D "Links" und "Rechts". Am Tower funktioniert wie gesagt alles, am Laptop passiert nichts. Also auch keine Fehlermeldung.

Mal ein paar ausgaben gemacht und geguckt, ob die Tastendrücke ankommen?

Nein noch nicht. Muss ich dann heute Nachmittag machen.

Mfg Gfreak
 
Moin nochmal


Also ich habe jetzt mit einem KeyListener gesehen, dass THEORETISCH alle Tasten funktionieren. Heute Vormittag das ganze Programm auch nochmal am Tower ausprobiert aber es klappt immernoch nicht....

Hoffe mir kann jemand weiterhelfen ich bin langsam mit meinem Latein am Ende+

Mfg GFreak
 
Moin,

Also ich habe jetzt mit einem KeyListener gesehen, dass THEORETISCH alle Tasten funktionieren.
Was genau heißt DAS denn ???:L ???:L ;(

WO hast Du WAS ausgeben?

Wenn da wirklich die Keyevents VK_LEFT und VK_RIGHT ankommen, wo ist dann das Problem?

Poste mal den aktuellen Code von Deinen Tests mit den entsprechenden Ausgaben ... habe kein eLuist hier ewig rumzuraten!

Gruß
Klaus
 
Zuletzt bearbeitet:
Hallo Vfl_Freak

1. Das soll heißen, dass die Tasten abc... als solch erkannt werden, allerdings nicht von meinem Programm!

2. Ich habe in einem Frame die Tasten "überwachen" lassen und die Ausgabe war immer richtig.

3. Da kommt nicht "VK_LEFT" oder "VK_RIGHT" raus bei den Pfeiltasten...

4. "Alter" Code oben! Neuer hier:

Java:
import ch.aplu.turtle.*;
import java.awt.Color;
import java.awt.event.*;

class TurtleRacer extends TurtleFrame
{
    private Turtle Jascha;
    private Turtle Jann;
    private Turtle kol;
    private Turtle Feld;
    int jaschatot = 0;
    int janntot = 0;
    int springitemjascha = 0;
    int springitemjann = 0;
    int counter =0;
    public void TurtleRacer()
    {
        addKeyListener(new KeyAdapter()
            {  
                public void keyPressed(KeyEvent e)
                {   
                    
                    if(janntot != 1 & jaschatot != 1)
                    {
                        switch(e.getKeyCode())
                        {
                            case KeyEvent.VK_L:
                            Jann.setHeading(Jann.heading() - 90);
                            break;

                            case KeyEvent.VK_J:
                            Jann.setHeading(Jann.heading() + 90);
                            break;

                            case KeyEvent.VK_D:
                            Jascha.setHeading(Jascha.heading() + 90);
                            break;

                            case KeyEvent.VK_A:
                            Jascha.setHeading(Jascha.heading() - 90);
                            break;

                            case KeyEvent.VK_R:
                            Feld.clean();
                            TurtleRacer();

                            Jascha.setPos(-50,0);
                            Jann.setPos(50,0);

                            double hindernis = Math.random() * 3;
                            if(hindernis < 3 & hindernis > 2)
                            {
                                Hindernis();
                                Hindernis();
                                Hindernis();
                            } else if(hindernis < 2 & hindernis > 1)
                            {
                                Hindernis();
                                Hindernis();
                            }else if(hindernis < 1)
                            {
                                Hindernis();
                            }
                            break;
                        }
                    }
                }
            });
        Jascha = new Turtle(this, Color.orange);
        Jann = new Turtle(this, Color.red);
        kol = new Turtle(this, Color.blue);
        Feld = new Turtle(this, Color.black);

        Jann.speed(-1);
        Jascha.speed(-1);

        Jascha.setPenColor(Color.orange);
        Jascha.setPos(-50,0);
        Jascha.penWidth(5);
        Jascha.wrap();

        Jann.setPenColor(Color.red);
        Jann.setPos(50,0);
        Jann.penWidth(5);
        Jann.wrap();

        kol.penUp();
        kol.hideTurtle();
        kol.speed(-1);
        kol.wrap();
        
        Feld.speed(-1);
        Feld.penUp();
        Feld.hideTurtle();
        Feld.setFillColor(Color.black);
        Feld.fill();
        Feld.penWidth(5);
        Feld.setPenColor(Color.yellow);

        double hindernis = Math.random() * 3;
        if(hindernis < 3 & hindernis > 2)
        {
            Hindernis();
            Hindernis();
            Hindernis();
        } else if(hindernis < 2 & hindernis > 1)
        {
            Hindernis();
            Hindernis();
        }else if(hindernis < 1)
        {
            Hindernis();
        }
        double item = Math.random() * 6;
        if(hindernis < 6 & hindernis > 4)
        {
            item();
            item();
            item();
        } else if(hindernis < 4 & hindernis > 2)
        {
            item();
            item();
        }else if(hindernis < 2)
        {
            item();
        }
        addStatusBar(40);
        setStatusText("LASSET DIE SPIELE BEGINNEN!");
        play();
    }

    public void play()
    {  

        boolean play;
        play = true;
        while(play = true)
        {
            int koljascha;
            kol.setPos(Jascha.getX(),Jascha.getY());
            kol.setHeading(Jascha.heading());
            kol.fd(5);
            if(springitemjascha == 0)
            {
                if(kol.getPixelColor().equals(Color.orange) || kol.getPixelColor().equals(Color.red) || kol.getPixelColor().equals(Color.yellow))
                {
                    koljascha=1;
                } else if (kol.getPixelColor().equals(Color.white))
                {
                    koljascha=0;
                    springitemjascha = 1;
                    springitemjascha();
                } else {
                    koljascha=0;
                }
            } else {
                koljascha = 0;
            }
            System.out.println("Jascha's Status: " + koljascha);

            int koljann;
            kol.setPos(Jann.getX(),Jann.getY());
            kol.setHeading(Jann.heading());
            kol.fd(5);
            if(springitemjann == 0)
            {
                if(kol.getPixelColor().equals(Color.orange) || kol.getPixelColor().equals(Color.red) || kol.getPixelColor().equals(Color.yellow))
                {
                    koljann = 1;
                } else if (kol.getPixelColor().equals(Color.white))
                {
                    koljann=0;
                    springitemjann = 1;
                    springitemjann();
                } else {
                    koljann = 0;
                }
            } else {
                koljann = 0;
            }
            System.out.println("Jann's Status: " + koljann);

            if(koljann == 1 || koljascha == 1)
            {
                play = false;
                if(koljann == 1 & koljascha == 1)
                {
                    play = false;
                    janntot=1;
                    jaschatot=1;
                    addStatusBar(40);
                    setStatusText("Unentschieden!!");
                }else if(koljann == 1)
                {
                    play = false;
                    janntot=1;
                    addStatusBar(40);
                    setStatusText("Jann hat verloren!");
                } else {
                    play = false;
                    jaschatot=1;
                    addStatusBar(40);
                    setStatusText("Jascha hat verloren!");
                }

            } else {

                Jascha.fd(5);
                Jann.fd(5);
                counter = counter +1;
            }
        }

    }

    private void Hindernis()
    {
        double d = Math.random() * 360;
        double x = Math.random() * 400;
        double y = Math.random() * 400;

        if(d <= 360 & d > 270)
        {
            Feld.setHeading(270);
        } else if(d <= 270 & d > 180)
        {
            Feld.setHeading(180);
        }else if(d <= 180 & d > 90)
        {
            Feld.setHeading(90);
        }else{
            Feld.setHeading(0);
        }
        Feld.setX(x - 200);
        Feld.setY(y - 200);

        Feld.penDown();
        Feld.fd(20);
        Feld.penUp();
    }

    private void item()
    {
        double d = Math.random() * 360;
        double x = Math.random() * 400;
        double y = Math.random() * 400;

        if(d <= 360 & d > 270)
        {
            Feld.setHeading(270);
        } else if(d <= 270 & d > 180)
        {
            Feld.setHeading(180);
        }else if(d <= 180 & d > 90)
        {
            Feld.setHeading(90);
        }else{
            Feld.setHeading(0);
        }
        Feld.setX(x - 200);
        Feld.setY(y - 200);

        Feld.setPenColor(Color.white);
        Feld.penDown();
        Feld.fd(20);
        Feld.setHeading(Feld.heading() - 90);
        Feld.fd(20);
        Feld.setHeading(Feld.heading() - 90);
        Feld.fd(20);
        Feld.setHeading(Feld.heading() - 90);
        Feld.fd(20);
        Feld.back(10);
        Feld.setHeading(Feld.heading() - 90);
        Feld.penUp();
        Feld.fd(10);
        Feld.setFillColor(Color.white);
        Feld.fill();
    }

    private void springitemjann()
    {
        int counter2 = 0;
        int counter3 = 0;
         counter2 = counter;
        while(counter3 != 5)
        {
            if(counter3 != 5)
            {
               
                counter3 = counter - counter2;
            } else {
                springitemjann = 0; 
            }
        }
    }

    private void springitemjascha()
    {
        int counter2 = 0;
        int counter3 = 0;
         counter2 = counter;
        while(counter3 != 5)
        {
            if(counter3 != 5)
            {
               
                counter3 = counter - counter2;
            } else {
                springitemjascha = 0; 
            }
        }
    }
}

Danke für deine bisherige Hilfe
GFreak
 
Moin,

1. Das soll heißen, dass die Tasten abc... als solch erkannt werden, allerdings nicht von meinem Programm!
Von wem denn dann ?????
Bislang ging es doch nur um die Pfeiltasten .... jetzt plötzlich auch im die Buchstaben ???

2. Ich habe in einem Frame die Tasten "überwachen" lassen und die Ausgabe war immer richtig.
und das heißt was ???

3. Da kommt nicht "VK_LEFT" oder "VK_RIGHT" raus bei den Pfeiltasten...
sondern ???
Muss ich denn alles einzeln nachfragen ??? ;(

Siehe Kommentare hier :
Java:
addKeyListener(new KeyAdapter()
{  
    public void keyPressed(KeyEvent e)
    { 
        // HIER mal den übergebenen KeyCode ausgeben !!!!

         // WAS IST DAS DENN ??? Sicher, dass Du überhaupt in den 'switch' kommt ??
         // Mach mal 'nen UND mit '&&' !!!
        if (janntot != 1 & jaschatot != 1) 
        {
            switch(e.getKeyCode())
.......                        {

Gruß
Klaus
 
Zuletzt bearbeitet:

Neue Themen


Zurück
Oben