Methode wird nicht überprüft

Pianoman.20

Mitglied
Hallo zusammen,

Mein Problem ist folgendes:

Ich habe auf einem JLabel die paintComponent-Methode aufgerufen und ein paar Bilder gezeichnet. In der Klasse des JLabels habe ich dann 2 Methoden konstruiert. Bei der ersten Methode habe ich zwei Timer erstellt und bei der zweiten Methode eine If-Abrage. Die If-Abfrage sollte überprüfen, ob der zweite Timer am laufen ist. Nur tut es das nicht... kann mir da jemand weiterhelfen?

Hier der Code:
Java:
import javax.swing.*;
import java.awt.*;

public class Spielfeld extends JLabel{
   
    int yStickfigure;
    double y;
    Timer timer1;
    Timer timer2;

    public Spielfeld(){

        //Grenzen setzen
        this.setBounds(420,85,570,740);

        //Methoden aufrufen
        jumpAnimation();
        collision();
    }

    public void paintComponent(Graphics g){

        //Hier habe ich die Bilder gezeichnet

        repaint();
    }

    public void jumpAnimation(){

        yStickfigure = this.getHeight()-163;
        y = 25;

        timer1 = new Timer(20, e -> {
            if (y >= 1.2){
                yStickfigure -= (int) y;
                y /= 1.3;
            } else {
                timer1.stop();
                timer2.start();
            }
        });
        timer1.start();

        timer2 = new Timer(20, e -> {
            if (y <= 25){
                y *= 1.3;
                yStickfigure += (int) y;
            } else {
                timer2.stop();
                timer1.start();
            }
        });
    }

    public void collision(){

        if (timer2.isRunning()){
            System.out.println("Timer 2 is running");
        }
    }
}
 

KonradN

Super-Moderator
Mitarbeiter
Also erst einmal vom Ablauf her:
Du rufst ja im Konstruktor erst jumpAnimation und dann collision auf.

jumpAnimation erstellt timer1 und timer2 und timer1 wird gestartet.
Dann kommt direkt im Anschluss collision mit der Prüfung ob timer2 läuft und das tut er natürlich nicht, denn timer1 hatte ja noch gar keine Zeit, den timer2 zu starten.
 

Pianoman.20

Mitglied
Danke, ich habe nun Gedankenfehler erkannt.

Ich habe jetzt die Methode collision nicht im Konstruktor aufgerufen sondern in der Methode jumpAnimation. Und zwar gleich nach der Anweisung "timer2.start". Somit braucht es keine If-Abfrage und die Methode collsion wird jedes Mal wenn timer2 gestartet wird einmalig ausgeführt.
 

KonradN

Super-Moderator
Mitarbeiter
Evtl. solltest du dir überlegen, das Spiel etwas umzuändern.

Bei der Spielentwicklung ist es durchaus üblich, dass es eine Gameloop gibt. In dieser werden in einer Schleife erst die Veränderungen gemacht und dann die Darstellung angepasst.
So würde ich in der Gameloop auch ein BufferedImage zur Darstellung erstellen und dann dem UI Thread bereit stellen. Danach erfolgt dort der repaint Aufruf.

paintComponent stellt dann nur das bereitgestellte Bild da.

Damit du nicht ständig neue BufferedImages erstellen musst, hast du eine feste Anzahl, die immer wieder verwendet werden. So hast du spezielle „Positionen“
  • ein aktuell angezeigtes Bild
  • das Bild, das als nächstes angezeigt werden soll
  • ein Bild, das aktuell gemalt wird.
  • ein Bild, das als Nächstes gemalt werden soll.

Übergänge sind dann synchronisiert, damit immer nur ein Thread da etwas verändern kann.

Eine der Positionen ist immer null.
paintComponent prüft, ob es ein neues Bild gibt, dann ist die Position für das nächste zu malende Bild null. Und es kann dann einmal verschoben werden (bis auf aktuell zu malendes Bild)
Der Thread, der gerade ein Bild gemalt hat, will das als Nächstes zu malendes Bild bereit stellen. Wenn da ein Bild ist, dann wird das das als Nächstes zu malende Bild und dann erfolgt da ein Tausch …

Das kann man sich aufmalen und dann wird das schnell deutlich.

Das wäre so der Aufbau, den ich wählen würde….
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
B Warum wird die Methode nicht aufgerufen? AWT, Swing, JavaFX & SWT 9
W Methode wird nicht ausgeführt AWT, Swing, JavaFX & SWT 15
F Java zeichnet nicht - Methode wird aber ausgeführt AWT, Swing, JavaFX & SWT 2
P paintComponent-Methode wird dauernd neu aufgerufen AWT, Swing, JavaFX & SWT 2
krgewb 2D-Grafik paint-Methode wird zu oft ausgeführt AWT, Swing, JavaFX & SWT 5
F setIcon wird erst nach der methode ausgeführt AWT, Swing, JavaFX & SWT 4
S Swing PopUp oeffnet sich nach der Methode, die erst nach Fensteraufruf gestartet wird AWT, Swing, JavaFX & SWT 3
M Swing Bild wird nie angezeigt, egal mit welcher Methode! AWT, Swing, JavaFX & SWT 10
F Welche Layout-Methode wird bei Größenänderung aufgerufen? AWT, Swing, JavaFX & SWT 4
X textarea updaten bevor eine Methode aufegerufen wird AWT, Swing, JavaFX & SWT 6
D welche Methode wird beim verstellen der Grösse aufgerufen AWT, Swing, JavaFX & SWT 5
MiMa Optimieren einer Methode zum Zentrieren von Fenstern AWT, Swing, JavaFX & SWT 0
M passende Reflexion-Methode?? AWT, Swing, JavaFX & SWT 1
M Seltsame Exception bei setVisible(true) Methode in einem JFrame AWT, Swing, JavaFX & SWT 2
M Swing Methode datenLesen() greift auf catchBlock zu? AWT, Swing, JavaFX & SWT 25
K JavaFX unterschiedliche (mehrere Fenster) in seperater Main Methode AWT, Swing, JavaFX & SWT 26
U was bewirkt die methode fill und unterschied zu anderen fill Methoden in 2dgraphics? (Java)? AWT, Swing, JavaFX & SWT 6
H Transparent zeichnen mit drawImage in paintComponent Methode AWT, Swing, JavaFX & SWT 3
Z Methode bei Boolean change neu Ausführen AWT, Swing, JavaFX & SWT 9
T TableView über Methode befüllen AWT, Swing, JavaFX & SWT 10
H Event Handling Thread - Abruf der get-Methode AWT, Swing, JavaFX & SWT 5
L JFrame Gui in anderer Methode aufrufen AWT, Swing, JavaFX & SWT 0
J Rekursive Methode JProgressBar AWT, Swing, JavaFX & SWT 4
A Methode pausieren bis anderes Ereignis ausgeführt AWT, Swing, JavaFX & SWT 2
K Swing Text eines Lables in einer Methode ändern AWT, Swing, JavaFX & SWT 13
1 Swing Progressbar benutzen um Fortschritt einer Methode anzuzeigen AWT, Swing, JavaFX & SWT 4
J Compiler in der JavaFX stop() Methode warten lassen bist eine Aktion in einer anderen Scene gemacht AWT, Swing, JavaFX & SWT 5
L JavaFX Problem beim Aufrufen einer Methode AWT, Swing, JavaFX & SWT 5
J 2D-Grafik Brauche Erklärung von Methode AWT, Swing, JavaFX & SWT 1
L Methode zum Füllen einer ComboBox AWT, Swing, JavaFX & SWT 4
I Methode Draw3DRect und DrawRect AWT, Swing, JavaFX & SWT 2
S Zeichen ohne paint-Methode AWT, Swing, JavaFX & SWT 2
K Methode repaint() AWT, Swing, JavaFX & SWT 1
A Methode in bestimmten Intervall ausführen AWT, Swing, JavaFX & SWT 2
J Swing Wann brauche ich @Override vor der paint()-Methode? AWT, Swing, JavaFX & SWT 1
Z jLabel von Methode aus aktualisieren AWT, Swing, JavaFX & SWT 7
Q AWT Methodenaufruf aus actionPerformed-Methode AWT, Swing, JavaFX & SWT 4
G Eine paint-Methode, 2 Welten? AWT, Swing, JavaFX & SWT 3
B Swing Update Swing Komponente bevor Methode startet. AWT, Swing, JavaFX & SWT 4
T Swing Methode in Listener aufrufen AWT, Swing, JavaFX & SWT 3
P keyTyped-Methode AWT, Swing, JavaFX & SWT 1
D JavaFX Java Methoden mit JavaFX Methode kommunizieren lassen? AWT, Swing, JavaFX & SWT 3
M JavaFX Methode nach initialize() aufrufen AWT, Swing, JavaFX & SWT 6
F JavaFX Mit einer Methode auf Stage zugreifen. AWT, Swing, JavaFX & SWT 8
A paint-Methode aufrufen AWT, Swing, JavaFX & SWT 13
C JavaFX Auf Nodes einer FXML-Datei in start Methode zugreifen AWT, Swing, JavaFX & SWT 5
R GUI Element in einer Methode aktualisieren (JTextPane) AWT, Swing, JavaFX & SWT 13
J Swing Problem mit Graphics Methode AWT, Swing, JavaFX & SWT 4
K Swing Durch Methode erzeugte Buttons ansteuern AWT, Swing, JavaFX & SWT 5
S Grafik: Programm kommt nicht zur paint()-Methode AWT, Swing, JavaFX & SWT 6
T LayoutManager Methode, um Bildschirm(fenster) für Aktualisierungen zu blockieren bzw. freizugeben gesucht AWT, Swing, JavaFX & SWT 2
W Paint-Methode in anderer Klasse funktioniert nicht AWT, Swing, JavaFX & SWT 7
S PaintIn - Methode AWT, Swing, JavaFX & SWT 1
J Swing ungewünschter Nebeneffekt bei der repaint() Methode AWT, Swing, JavaFX & SWT 3
A befüllen eines JTables mittels Methode AWT, Swing, JavaFX & SWT 10
K Kann nicht auf GUI Elemente zugreifen, mit einer Methode im Controller klappts, mit der anderen nich AWT, Swing, JavaFX & SWT 10
D JavaFX Interface Initializable - Was machen die Parameter in der Methode inizializeable() ? AWT, Swing, JavaFX & SWT 4
S JLabel-Text in Methode setzen? AWT, Swing, JavaFX & SWT 2
F JavaFX Zugriff auf Controller Methode von einer normalen Klasse aus AWT, Swing, JavaFX & SWT 4
F 2D-Grafik Was ruft die Paint - Methode auf ? AWT, Swing, JavaFX & SWT 2
S JButton u. Label auf paint-Methode AWT, Swing, JavaFX & SWT 1
S Paint Methode ohne implements JPanel AWT, Swing, JavaFX & SWT 1
S Farbe ändern bei der paint-Methode AWT, Swing, JavaFX & SWT 5
J ActionListener soll auf paint() Methode zugreifen AWT, Swing, JavaFX & SWT 1
J Problem mit der paint Methode AWT, Swing, JavaFX & SWT 0
J JLabel während einer methode aktualisieren AWT, Swing, JavaFX & SWT 6
Junb 2D-Grafik paint() Methode bugt? AWT, Swing, JavaFX & SWT 2
T Swing Label aus anderer Methode bearbeiten AWT, Swing, JavaFX & SWT 2
I Paint-Methode von nicht statischen Objekten aufrufen AWT, Swing, JavaFX & SWT 3
C Methode über Buttonklick starten AWT, Swing, JavaFX & SWT 8
S Swing Mit einem Link eine Methode aufrufen AWT, Swing, JavaFX & SWT 2
P Swing Auf Methode zugreifen (am Schlauch steh) AWT, Swing, JavaFX & SWT 5
D JSlider "laggt" nach überschreiben der paint methode AWT, Swing, JavaFX & SWT 2
D Swing DefaultTableModel setValueAt Methode AWT, Swing, JavaFX & SWT 7
J valueChanged()-Methode liefert unbrauchbare Daten AWT, Swing, JavaFX & SWT 4
T Swing JPanel - "Open" Methode? AWT, Swing, JavaFX & SWT 6
P Swing actionPerformed()-Methode funktioniert nicht AWT, Swing, JavaFX & SWT 3
M Applet Bricht Methode zwischendruch ab AWT, Swing, JavaFX & SWT 11
K Per Textfield Methode ausführen AWT, Swing, JavaFX & SWT 6
J Swing JTable - nach Sortieren andere Methode aufrufen AWT, Swing, JavaFX & SWT 2
C Swing Was macht die Methode "setDataProviderCreditShown(boolean b)" AWT, Swing, JavaFX & SWT 4
R Swing Mit Swing eine throws Exception Methode öffnen AWT, Swing, JavaFX & SWT 3
GianaSisters Swing jTable's valueChanged Methode überschreiben AWT, Swing, JavaFX & SWT 2
P EDT Problem? Kein Aufruf der repaint Methode AWT, Swing, JavaFX & SWT 6
A Paint Methode externer auruf AWT, Swing, JavaFX & SWT 5
N Methode zum Prüfen ob Jtextfield verändert worden ist AWT, Swing, JavaFX & SWT 2
K beim Schließen des JFrames, Methode aufrufen AWT, Swing, JavaFX & SWT 3
J AWT Methode paint() AWT, Swing, JavaFX & SWT 4
X Bild via FileChooser in paint-Methode laden AWT, Swing, JavaFX & SWT 2
E Umgang mit der Update Methode AWT, Swing, JavaFX & SWT 38
D Applet Methode in Timer einbinden AWT, Swing, JavaFX & SWT 6
Screen Fehler bei Get-Methode für ArrayList AWT, Swing, JavaFX & SWT 8
P Swing JPanel über Methode setzen AWT, Swing, JavaFX & SWT 2
A Frage zur Methode matches() AWT, Swing, JavaFX & SWT 2
eskimo328 Java6 Methode in Java5 verwenden (memory leak JInternalFrame) AWT, Swing, JavaFX & SWT 4
T Swing setText()-Methode Funktioniert nicht AWT, Swing, JavaFX & SWT 7
L JLabel Methode setText funktioniert nicht AWT, Swing, JavaFX & SWT 5
S Thread.sleep() in einer methode fürs zeichen AWT, Swing, JavaFX & SWT 3
S Visual Editor mit main Methode AWT, Swing, JavaFX & SWT 3
G paint-Methode kopiert GUI AWT, Swing, JavaFX & SWT 14

Ähnliche Java Themen

Neue Themen


Oben