2D-Grafik Spielfigur bewegt sich nicht

memuench

Mitglied
Hallo, ich arbeite gerade an einem sporadischen Frogger Code, stoße jedoch im Moment auf das Problem, dass ich die Figur so gut wie nicht bewegen kann. Wenn ich nach links tippe, bewegt er sich zwar 1 nach links aber danach will er sich nicht mehr bewegen. Dasselbe gilt für alle Richtungen.
Das ist der Code mit dem KeyListener und den Panels:
Java:
public class FroggerFrame extends JFrame {

    GameInstance gi;
    FroggerStartPanel fstp;
    MoveListener ml = new MoveListener();
   
    public FroggerFrame() {
        this.setLayout(new BorderLayout());
        this.setTitle("Frogger");
        gi = new GameInstance();
        FroggerGamePanel fgp = new FroggerGamePanel();
        FroggerScorePanel fsp = new FroggerScorePanel();
        fstp = new FroggerStartPanel();
        this.add(fgp, BorderLayout.CENTER);
        this.add(fsp, BorderLayout.PAGE_START);
        this.add(fstp, BorderLayout.PAGE_END);
        this.addKeyListener(ml);

        super.setDefaultCloseOperation(EXIT_ON_CLOSE);
        super.repaint();
        pack();
        super.setVisible(true);
       
   
       
    }
   
   
    public static void main(String[] args) {
        FroggerFrame p = new FroggerFrame();
       
    }
   
   
   
    class FroggerGamePanel extends JPanel{
       
        public FroggerGamePanel() {
            setPreferredSize(new Dimension(600,300));
            setOpaque(true);
        }
        protected void paintComponent(Graphics g) {
            super.paintComponent(g);
            g.drawImage(io.ImageLoader.getActor("froggerstreet"),0,0,null);
        }
    }
   
    class FroggerScorePanel extends JPanel{
        private TitledBorder t3 = BorderFactory.createTitledBorder("Menu");
       
        private Border etched = BorderFactory.createEtchedBorder(Color.WHITE, Color.white);

       
        public FroggerScorePanel() {
            setLayout(new FlowLayout());
            setPreferredSize(new Dimension(600,100));
            setBackground(Color.DARK_GRAY);
            t3.setBorder(etched);
            t3.setTitleColor(Color.white);
            setBorder(t3);
           
            setVisible(true);
            setOpaque(true);
           

        }
       
        public void paintComponent(Graphics g) {
            int potraithelp=334;
            Graphics2D g2 = (Graphics2D)g;
            super.paintComponent(g2);
            g2.setColor(Color.white);
            g2.drawString("Score: "+gi.getScore(), 5, 50);
            g2.drawString("Lifes:", 300, 50);
           
            for(int i=0;i< gi.getLifes();i++) {
                g2.drawImage(io.ImageLoader.getActor("froggerpotrait"),potraithelp,50-17,null); //Position vorgeben, rest student?
                potraithelp+=34;
            }
       
        }
    }
   
    class FroggerStartPanel extends JPanel{
        Frogger help = gi.getCurr();
       
        public FroggerStartPanel() {
            setPreferredSize(new Dimension(600,100));
            setBackground(Color.GREEN);
            setOpaque(true);
           
        }
       
        public void paint(Graphics g) {
            Graphics2D g2 = (Graphics2D) g;
            g2.setBackground(Color.green);
            help.paint(g2);
        }
    }
   
    class MoveListener implements KeyListener{

        @Override
        public void keyTyped(KeyEvent e) {
            // TODO Auto-generated method stub
           
        }

        @Override
        public void keyPressed(KeyEvent e) {
            if(e.getKeyCode()==KeyEvent.VK_DOWN) {
                gi.getCurr().moveDown();
               
            }
           
            if(e.getKeyCode()==KeyEvent.VK_UP) {
                gi.getCurr().moveUp();
            }
           
            if(e.getKeyCode()==KeyEvent.VK_LEFT) {
                gi.getCurr().moveLeft();
            }
           
            if(e.getKeyCode()==KeyEvent.VK_RIGHT) {
                gi.getCurr().moveRight();
            }
           
            fstp.repaint();
           
           
        }

        @Override
        public void keyReleased(KeyEvent e) {
            // TODO Auto-generated method stub
           
        }
       
    }
   

   
}

GameInstance:

Java:
public class GameInstance {
   
    private int lifes;
    private boolean gameActive;
    private boolean paused;
    private int score;
    private Frogger curr;
   
    public GameInstance() {
        this.lifes =3;
        this.score=0;
        this.curr = new Frogger(ActorType.FROGGER);
        //curr.setLocation(0, 50);
    }
   
    public void addScore(int n) {
        this.score+=n;
    }
   
    public int getScore() {
        return this.score;
    }
   
    public int getLifes() {
        return this.lifes;
    }
   
    public void loseLife() {
        this.lifes--;
    }
   
    public Frogger getCurr() {
        return this.curr;
    }

}


Spielerklasse:

Java:
public class Frogger extends GameObject {

    public Frogger(ActorType type) {
        super(type);
    }

   
    public void paint(Graphics g) {
        Graphics2D g2 = (Graphics2D) g;
        g2.drawImage(this.getImg(), this.getX(),this.getY(), 50, 50, null); //Testwerte
       
    }
   
    public void moveDown() {
        this.move(0, 1);
    }
   
    public void moveUp() {
        this.move(0, -1);
    }
   
    public void moveRight() {
        this.move(1, 0);
    }
   
    public void moveLeft() {
        this.move(-1, 0);
    }
   
   
   
    public void move(int x,int y) {

            this.setLocation(x, y);
           
   
    }
   

   
}

Sieht hier irgendwer den Fehler, den ich einfach nicht sehe??
 

memuench

Mitglied
Wie sieht die Klasse GameObject aus?
Hi Robat, kaum gepostet hatte ich das Problem selbst. Ich habe bei moveDown z.B. die Position mit (0,1) ersetzt und nicht oben drauf addiert. So nun hätte ich aber noch eine Frage:
Ist es möglich eine Figur über zwei Panel zu bewegen?
Denn ein Panel war bei mir der Startbereich von Frogger und direkt oben drüber ist die Straße als Panel. Aber mir ist eben aufgefallen, dass sich die Figur nicht in die Straße bewegen lässt, sondern nur panel-intern fortbewegt
 

memuench

Mitglied
Warum teilst du es denn auf verschiedene Panel auf und nimmst nicht eins auf dem du alles zeichnest?
Weil ich den Straßenteil dann leicht durch 4 Teilen kann um die Position der Autos zu ermitteln (also der x - Punkt, an dem die Autos einfahren). Wenn es nicht anders geht, muss ich das dann wohl dazu packen. Dann kann ich ja dennoch einfach die Höhe von dem Starting Point abziehen, um die Fläche der Straße zu erhalten
 

truesoul

Top Contributor
Hallo.

Sobald er den ersten Panel verlässt muss du im anderen Panel zeichen. Also die zweite paintComponent(...) verwenden.
Ich würde aber nicht mehrere Panels verwenden und nur eins. Das ist simpler zu implementieren.
Ich würde auch vermuten das die Position im zweiten auch dann von 0 bis x hoch ist und im ersten Panel auch.
Schon das ist nicht so sauber. Weil der Frosch dann mehrmals die Position 0 bis x haben kann aber sich in unterschiedlichen Panels befindet.

Grüße
 

memuench

Mitglied
Hallo.

Sobald er den ersten Panel verlässt muss du im anderen Panel zeichen. Also die zweite paintComponent(...) verwenden.
Ich würde aber nicht mehrere Panels verwenden und nur eins. Das ist simpler zu implementieren.
Ich würde auch vermuten das die Position im zweiten auch dann von 0 bis x hoch ist und im ersten Panel auch.
Schon das ist nicht so sauber. Weil der Frosch dann mehrmals die Position 0 bis x haben kann aber sich in unterschiedlichen Panels befindet.

Grüße
Hallo, du hast Recht, ich habe es jetzt so geändert, funktioniert perfekt. Ich habe jedoch noch eine Frage: Wie spawne ich nun am besten per Thread die Autos die einfahren?

Java:
package objects;

public class Car extends GameObject {
   

    public Car(ActorType type) {
        super(type);
        this.setSpeed(30);

    }
   
    public void moveLeft() {
        this.setLocation(-this.getSpeed(), 0);
    }
   
    public void moveRight() {
        this.setLocation(this.getSpeed(), 0);
    }
   
   
    class CarMovementThread extends Thread{
        public void run() {
           
        }
    }

}

Java:
package objects;

import java.awt.Image;

public class GameObject {

    private int x,y;
    private int width,height;
    private int speed;
    private ActorType type;
    private Image sprite;
   
    public GameObject(ActorType type) {
        this.type = type;
    }
   
    public int getX() {
        return this.x;
    }
   
    public int getY() {
        return this.y;
    }
   
    public int getWidth() {
        return this.width;
    }
   
    public int getHeight() {
        return this.height;
    }
   
    public int getSpeed() {
        return this.speed;
    }
   
    public void setSpeed(int speed) {
        this.speed = speed;
    }
   
    public void setLocation(int x,int y) {
        this.x = this.x+x;
        this.y = this.y+y;
    }
   
    public Image getImg() {
        if(this.sprite==null) {
            switch(this.type) {
            case CAR_RED: this.sprite = io.ImageLoader.getActor("carred");
            case CAR_BLUE: this.sprite = io.ImageLoader.getActor("carblue");
            case CAR_GREEN: this.sprite = io.ImageLoader.getActor("cargreen");
            case CAR_PURPLE: this.sprite = io.ImageLoader.getActor("carpurple");
            case FROGGER: this.sprite = io.ImageLoader.getActor("froggercharacter");
            }
        }
       
        return this.sprite;
    }
}

Ich muss nun im Thread wahrscheinlich je nach Richtung moveLeft() / moveRight() ausführen aber wie zeichne ich die Autos dann? Der Thread beinhaltet ja keine möglich auf eine paint Methode oder??
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
T Timer und GIF Animationen pausieren während Maus sich bewegt AWT, Swing, JavaFX & SWT 4
B JavaFX Problem bei Kamera / Group, gesamte Scene bewegt sich mit AWT, Swing, JavaFX & SWT 0
B 2D-Grafik Fisch bewegt sich nicht korrekt AWT, Swing, JavaFX & SWT 3
reibi SWT Fenster in SWT soll nicht bewegt werden AWT, Swing, JavaFX & SWT 2
S Objekt wird während Endlosschleife nur einmal bewegt AWT, Swing, JavaFX & SWT 2
I JavaFX Programmcode pausieren gestaltet sich als schwierig AWT, Swing, JavaFX & SWT 7
N Dropshadow setzen bei einer Gruppe von Tiles, die sich jeweils in einer Stackpane befinden, welche in einer Gridpane angeordnet sind. AWT, Swing, JavaFX & SWT 0
berserkerdq2 Skalieren sich javafx objekte automatisch auf die Bildschirmgröße AWT, Swing, JavaFX & SWT 6
B JavaFX Prüfen ob ein Objekt sich mehrmals in einer Liste befindet AWT, Swing, JavaFX & SWT 5
K Textarea aktuallisiert sich nicht, nach Auswahl (Itemlistener) AWT, Swing, JavaFX & SWT 3
S e(fx)clipse erscheint nicht im Marketplace, lässt sich nicht installieren AWT, Swing, JavaFX & SWT 16
A TableView updatet sich nicht AWT, Swing, JavaFX & SWT 3
M Wieso verändert sich die Framerate nach erneutem Starten des AnimationTimer? AWT, Swing, JavaFX & SWT 18
I AWT java.awt.FileDialog - "coffee cup"-Icon lässt sich nicht ersetzen AWT, Swing, JavaFX & SWT 14
J JOptionPane ruft sich selbst immer wieder neu auf AWT, Swing, JavaFX & SWT 3
P Swing Programm hängt sich bei Buttondruck auf? (GUI für "Chatbot" erstellen) AWT, Swing, JavaFX & SWT 15
T Swing JTable cellRenderer mit jpg Hintergrundfarbe lässt sich nicht ändern. AWT, Swing, JavaFX & SWT 1
R JOptionPane schließt sich nicht wieder AWT, Swing, JavaFX & SWT 2
R Textfield lässt sich nicht positionieren AWT, Swing, JavaFX & SWT 1
E Keystroke für Ausschneiden läßt sich nicht ändern AWT, Swing, JavaFX & SWT 2
B Dynamische ListView-Größe, die bei Fenstergrößenänderung sich anpasst AWT, Swing, JavaFX & SWT 19
sascha-sphw JavaFX ListCell höhe verändert sich beim ändern der Text-Farbe AWT, Swing, JavaFX & SWT 14
R Swing Komponente im JFrame überschreinen sich AWT, Swing, JavaFX & SWT 7
A Swing Datei lässt sich zwar speichern, aber nicht laden (Inhalt im JTextField anzeigen) AWT, Swing, JavaFX & SWT 18
O showConfirmDialog öffnet sich nicht AWT, Swing, JavaFX & SWT 3
K JavaFX Fenstergröße ändert sich (Gluon - SceneBuilder) AWT, Swing, JavaFX & SWT 23
S JavaFX Scene öffnet sich nicht AWT, Swing, JavaFX & SWT 3
C Bilder so einbinden, dass sie sich ändern AWT, Swing, JavaFX & SWT 6
ralfb1105 JavaFX Label lässt sich innerhalb service Task nicht updaten? AWT, Swing, JavaFX & SWT 22
J ChangeListener verhält sich komisch AWT, Swing, JavaFX & SWT 14
S Ausgabe aktualisiert sich nur nach 2. Klick AWT, Swing, JavaFX & SWT 17
Legi Swing JButton Icon verschiebt sich AWT, Swing, JavaFX & SWT 2
P Gui lässt sich nicht starten AWT, Swing, JavaFX & SWT 10
B JavaFX setOnMousePressed() - verhält sich wie setOnMouseClicked()? AWT, Swing, JavaFX & SWT 6
R JavaFX lässt sich nicht in Eclipse einbinden AWT, Swing, JavaFX & SWT 4
J BackgroundJPanel passt sich dem JFrame nicht an AWT, Swing, JavaFX & SWT 7
J Button lässt sich nicht auf dem JPanel verschieben AWT, Swing, JavaFX & SWT 5
W Javafx - Image soll sich mit der Camera mitbewegen AWT, Swing, JavaFX & SWT 1
T .jar-Datei lässt sich unflexibler ausführen als über die IDE AWT, Swing, JavaFX & SWT 11
K JavFX: VBox.setVGrow stell sich quer AWT, Swing, JavaFX & SWT 2
S Swing Bedienelemente ordnen sich automatisch neu an AWT, Swing, JavaFX & SWT 2
B Hauptfenster öffnet sich mehrmals AWT, Swing, JavaFX & SWT 9
K Mit JavaFX angefangen. Lohnt sich Swing? AWT, Swing, JavaFX & SWT 28
E Java FX ProgressIndicator dreht sich nicht AWT, Swing, JavaFX & SWT 8
P Swing JFrame minimiert sich bei Doppelklick auf die Titel-Leiste AWT, Swing, JavaFX & SWT 16
krgewb AWT JFrame soll sich wie Dialog verhalten AWT, Swing, JavaFX & SWT 9
D JavaFX Label lässt sich nicht mehrmals färben AWT, Swing, JavaFX & SWT 7
Prafy Sich ändernde Farbverläufe erstellen AWT, Swing, JavaFX & SWT 4
D JavaFX Anwendung hängt sich permanent auf AWT, Swing, JavaFX & SWT 6
T JButton überlagern sich und werden erst beim Mausscrollen sichtbar AWT, Swing, JavaFX & SWT 2
T Swing Programm hängt sich auf! AWT, Swing, JavaFX & SWT 23
C LayoutManager Bei verkleinern des Fensters, verschieben sich JPanels übereinander. AWT, Swing, JavaFX & SWT 7
J Button vergrößert sich bei Fenster resize AWT, Swing, JavaFX & SWT 22
J Lohnt sich FX? AWT, Swing, JavaFX & SWT 2
Tort-E JavaFX ProgressIndicator dreht sich nicht AWT, Swing, JavaFX & SWT 2
S JavaFX Image Skalierung in Scrollpane, Scrollpane resized sich nicht AWT, Swing, JavaFX & SWT 5
N Programm mit Swing und Thread, Figur bewegen sich nicht AWT, Swing, JavaFX & SWT 6
Tom299 JavaFX Default-Cursor läßt sich nicht immer "aktivieren" AWT, Swing, JavaFX & SWT 3
B Frame hängt sich auf trotz invokeLater AWT, Swing, JavaFX & SWT 1
D Java Swing, Label lässt sich nicht mit Checkboxen/Knopf verändern AWT, Swing, JavaFX & SWT 2
J Server stellt sich hin AWT, Swing, JavaFX & SWT 13
R Swing Elemente verschieben sich im GBL beim Ein/Ausblenden AWT, Swing, JavaFX & SWT 0
L JButton flackern - Programm hängt sich auf AWT, Swing, JavaFX & SWT 3
H JTree in JScrollPane passt sich nicht an Größe von JPanel an AWT, Swing, JavaFX & SWT 2
J Programm hängt sich bei Log In auf AWT, Swing, JavaFX & SWT 1
M JFreeChart neu zeichnen sich Wenn Jtable sich ändert AWT, Swing, JavaFX & SWT 5
ToBJo JavaFX TreeView zerstört sich selbst AWT, Swing, JavaFX & SWT 1
T Swing Button bleibt grau [=> UI hat sich aufgehängt, Aufgabe in Thread auslagern] AWT, Swing, JavaFX & SWT 3
M JXTreeTable: Spaltengröße läßt sich nicht mehr festlegen AWT, Swing, JavaFX & SWT 0
I JPanel in JScrollPane verkleinert sich leider nicht .... AWT, Swing, JavaFX & SWT 2
G Komponenten vergrößern sich nicht trotz Layoutmanager AWT, Swing, JavaFX & SWT 24
W JTextfield - Wert lässt sich nicht setzen AWT, Swing, JavaFX & SWT 3
H 2D-Grafik BufferStrategy zieht spur hinter sich her AWT, Swing, JavaFX & SWT 3
T SWT SWTBot Test: Dialog soll sich öffnen,wenn button gedrückt AWT, Swing, JavaFX & SWT 3
kaoZ Swing JFrame lässt sich nicht über dispose() abbauen AWT, Swing, JavaFX & SWT 0
D 2D-Grafik Rechteck befindet sich unter dem Rahmen des JFrame. AWT, Swing, JavaFX & SWT 1
A Swing per JComboBox gewünschtes Attribut auswählen und Komponenten passen sich an AWT, Swing, JavaFX & SWT 7
B Swing focusGained öffnet sich zwei mal AWT, Swing, JavaFX & SWT 3
S JScrollPane --> Programm hängt sich beim scrollen auf AWT, Swing, JavaFX & SWT 2
A Panel lässt sich nicht bewegen AWT, Swing, JavaFX & SWT 2
U ToolTip Größenänderung, passt sich erst beim zweiten Mal an AWT, Swing, JavaFX & SWT 6
H Java3D, ViewP Translattform soll sich nach einerformgroup richten. AWT, Swing, JavaFX & SWT 5
R JPanel-Größe verändert sich nicht. Warum? AWT, Swing, JavaFX & SWT 5
R Swing getContentPane maximiert sich nicht mit, wenn man das JFrame maxmiert AWT, Swing, JavaFX & SWT 8
A 2D-Grafik Zeichnen einer sich bewegenden Box mit BufferStrategy zieht Spur AWT, Swing, JavaFX & SWT 2
G 2D-Slider bzw. eine graphische Auswahlkomponente die sich so verhält AWT, Swing, JavaFX & SWT 6
F Grafik hängt sich auf AWT, Swing, JavaFX & SWT 20
M JavaFX WebView lässt sich nur einmal öffnen AWT, Swing, JavaFX & SWT 2
B Komponenten in Fenster verdrängen sich untereinander AWT, Swing, JavaFX & SWT 6
W Swing JButton lässt sich nicht anzeigen AWT, Swing, JavaFX & SWT 8
J AWT choice mit viel Auswahl aktualisiert sich nicht korrekt beim scrollen?! AWT, Swing, JavaFX & SWT 3
A Vier gewinnt: GUI aktualisiert sich nicht AWT, Swing, JavaFX & SWT 12
T Java Swing Oberfläche aktualisiert sich nicht AWT, Swing, JavaFX & SWT 2
P JApplet verhält sich im Browser anders als im Eclipse (AppletViewer) AWT, Swing, JavaFX & SWT 3
D JSplitPane lässt sich nicht verschieben AWT, Swing, JavaFX & SWT 3
S Look und Feel ändert sich nicht AWT, Swing, JavaFX & SWT 4
M Swing + Java2D Sichtfeld bewegen verhält sich träge AWT, Swing, JavaFX & SWT 4
bluerob JComponenten verschieben sich bei Fenster wechseln AWT, Swing, JavaFX & SWT 3
T jTable Spaltenbreite lässt sich nicht ändern AWT, Swing, JavaFX & SWT 8
M Swing Warum öffnen sich beim Zeichnen mit Swing plötzlich zwei Fenster? AWT, Swing, JavaFX & SWT 5

Ähnliche Java Themen

Neue Themen


Oben