Swing Spiel flackert sehr häufig

K

Katharsas

Gast
Ich bin dabei, ein kleines 2D-Spiel in Java zu programmieren. Man steuert einen kleine Jäger und schießt damit um sich.
Es funktioniert zwar, aber wenn man anfängt, zu schießen, fängt das Spiel plötzlich stark an zu flackern. Und zwar erst nach ein paar Sekunden, d.h.:

Wenn ich wild um mich schieße, daurt es ein paar Sekunden, bis es wild flackert, wenn nicht, dann flackert es nur hin und wieder und beginnt, wenn man nach den paar sekunden um sich schießt, sofort an wild zu flackern.
Die Schüsse sind wie die Spieler und Gegner auch einfache .png-Grafiken, die bei jedem Frame auf den Hintergrund gepaintet werden.

Wenn ich im Konstruktor meiner Klasse:
Code:
class CInterface extends JFrame
=>
Code:
createBufferStrategy(2);
aufrufe, verbesset sich das ganze bzw. verzögert sich, ist aber immer noch ziemlich nervig.

Ich poste erst mal die Klassen CInterface und CObject. CInterface paintet alle CObject-Objekte (bzw. alle, die von CObject erben).

CInterface:
Java:
import java.util.ArrayList;
import java.util.LinkedList;
import javax.swing.*;
import java.awt.event.*;
import java.awt.*;

import java.lang.Math;
import java.awt.Toolkit;
import java.awt.Dimension;


class CInterface extends JFrame
{ 
    private LinkedList<CObject> m_ObjectList;

    private int printout;
    private KeyAdapter m_kKeyAdapter;
    private boolean[] m_baBooleanArray;
    private boolean[] m_baMouseArray;
    private vector2 m_v2MousePosition;
    
    private boolean m_bIsDefined;
    
    private int screen_width;
    private int screen_height;
    
    private Image dbImage;
    private Graphics dbg;
    
    CInterface()
    {
        printout=2;
        m_bIsDefined=false;

        Toolkit toolkit = Toolkit.getDefaultToolkit();
        Dimension dim = toolkit.getScreenSize();
        screen_width=dim.width;
        screen_height=dim.height;
        
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setTitle("GAME");
        setSize((int)CData.size.x,(int)CData.size.y);
        setLocation((screen_width/2)-((int)CData.size.x/2)+310,(screen_height/2)-((int)CData.size.y/2));
        setResizable(false);
                if(printout>1){
                setResizable(true);}
        
        
        setVisible(true);
        defineVariables();
        createBufferStrategy(3);
    }
    
    public void defineVariables()
    {
        CData.insets = new vector2(getInsets().left, getInsets().top);
        m_baMouseArray = new boolean[3];
        m_v2MousePosition = new vector2(0,0);
        m_baBooleanArray = new boolean[30];
        m_ObjectList = new LinkedList<CObject>();
        
        m_bIsDefined=true;                              // Frame-Grafikobjekte werden ab jetzt gepainted
    }

    public void paint(Graphics g) //Graphiken werden auf Frame gepaintet
    { 
        if (m_bIsDefined)
        {
            for (int i=m_ObjectList.size();i>0;i--)
            {
                g = m_ObjectList.get(i-1).render(g);
            }
        }
    }
    
    public void update(Graphics g) 
    {
        dbImage = createImage (this.getSize().width, this.getSize().height);
        dbg = dbImage.getGraphics ();
        dbg.setColor (getBackground ());
        dbg.fillRect (0, 0, this.getSize().width, this.getSize().height);
        dbg.setColor (getForeground());
        paint(dbg);
        g.drawImage (dbImage, 0, 0, this);
    }

    public void setObjectList(LinkedList<CObject> objectList)
    {
        m_ObjectList = objectList;
    }
}

Bei jedem Frame wird die Funktion
Code:
public void setObjectList(LinkedList<CObject> objectList)
und repaint aufgerufen:
Funtion "run" aus Klasse CRuntime:
Java:
public void run()
    {
        long m_lTime = 0; 
        while(true)
        {   
            m_lTime = System.currentTimeMillis();
            
            if(true)//Pausieren entfernt
            {
                m_Interface.setObjectList(createObjectList());
                m_Interface.repaint();
            }
            wait.waitms((1000/m_iFramerate)-(System.currentTimeMillis()-m_lTime));
        }
    }

Es werden Objekte gepaintet, die alle CObject erben:
CObject:
Java:
import javax.swing.*;
import javax.imageio.*;
import java.awt.*;
import java.awt.image.*;
import java.io.*;

/**
 * Abstrakte Klasse, Objekte dieser Klasse können gepaintet werden.
 * Alle gepainteten Objekte des Spiels leiten sich von dieser Klasse ab.
 * 
 * @author 
 */
abstract class CObject
{
    public vector2 m_v2Pos;
    public vector2 m_v2Size;

    public BufferedImage m_gfx;
    
    
    public void CObject(String sFileName, vector2 v2Pos, vector2 v2Size)
    {
        m_v2Pos = v2Pos;
        m_v2Size = v2Size;
        try
        {
            m_gfx = ImageIO.read(new File(sFileName));
        }
        catch(IOException e)
        {
            e.printStackTrace();
        }
    }
    
    public void CObject()
    {
    }
    
    public Graphics render(Graphics g)
    {
        g.drawImage(m_gfx, (int)m_v2Pos.x, (int)m_v2Pos.y, null);
        return g;
    }
    
    public void addPos(vector2 v2Pos)
    {
        m_v2Pos.x += v2Pos.x;
        m_v2Pos.y += v2Pos.y;
    }
}

Hat jemand eine Idee?
 
K

Katharsas

Gast
Habs mit nem JPanel versucht, und es klappt einwandfrei! Danke @Marco13!

Kann als "Erledigt" markiert werden !
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
K JavaFX Memory Spiel AWT, Swing, JavaFX & SWT 12
A Problem Spiel auf Panel der GUI zu bringen AWT, Swing, JavaFX & SWT 1
Zeppi Swing Button soll Spiel zurücksetzen AWT, Swing, JavaFX & SWT 5
J Spiel mit Java AWT, Swing, JavaFX & SWT 9
MABY Swing Spiel mit 2 AWT, Swing, JavaFX & SWT 4
O Focus zwischen Chat und Spiel wechselns AWT, Swing, JavaFX & SWT 3
C Benutzername in GUI eingeben und nach Spiel neues Fenster Benutzername wieder anzeigen AWT, Swing, JavaFX & SWT 1
Y Simple Spiel ploten AWT, Swing, JavaFX & SWT 2
H Swing Spiel: Maexchen: method cannot be applied to given types AWT, Swing, JavaFX & SWT 3
C Im Spiel wie auf Pfeiltasten reagieren? AWT, Swing, JavaFX & SWT 3
X Snake - Spiel AWT, Swing, JavaFX & SWT 27
U Event Handling JButton Actionevent: starte Spiel AWT, Swing, JavaFX & SWT 4
B Tastensteuerung im Spiel AWT, Swing, JavaFX & SWT 5
N Hilfe bei Memory-Spiel AWT, Swing, JavaFX & SWT 18
T 2D-Grafik Im 2D Spiel zoomen AWT, Swing, JavaFX & SWT 6
S Swing Spiel Richtig/Falsch implementieren AWT, Swing, JavaFX & SWT 5
J 2D-Grafik Textbasiertes 2D Spiel, jedes Zeichen manipulierbar AWT, Swing, JavaFX & SWT 7
J Spieleprogramm als "richtiges" Spiel starten AWT, Swing, JavaFX & SWT 19
B Swing Memory-Spiel AWT, Swing, JavaFX & SWT 2
M Swing Memory Spiel in Eclipse AWT, Swing, JavaFX & SWT 5
D Probleme mit Spiel-Engine. Komische Fehler. AWT, Swing, JavaFX & SWT 5
B spiel atomica mit swing AWT, Swing, JavaFX & SWT 6
G Problem mit Swing bei einem Sudoku Spiel AWT, Swing, JavaFX & SWT 2
G Spiel frage zu bilder in java einbinden AWT, Swing, JavaFX & SWT 3
M Problem bei Schiffeversenken-Spiel AWT, Swing, JavaFX & SWT 4
G Spielfeld für ein Spiel erstellen, wie am besten? AWT, Swing, JavaFX & SWT 4
D JavaFX Label flackert beim aktualisieren AWT, Swing, JavaFX & SWT 12
Damtonix BufferStrategy flackert (Swing) AWT, Swing, JavaFX & SWT 9
M Warum flackert das Bild ? (Swing) AWT, Swing, JavaFX & SWT 16
frankred Swing Eigener ListCellRenderer D'n'D "MOVE" - Mauszeiger flackert AWT, Swing, JavaFX & SWT 14
T Swing OpenOffice IFrame flackert beim ändern der Größe AWT, Swing, JavaFX & SWT 6
J Applet Tetris flackert AWT, Swing, JavaFX & SWT 9
D 2D-Grafik Animation flackert AWT, Swing, JavaFX & SWT 8
J Swing JWindow flackert trotz Doppelpufferung AWT, Swing, JavaFX & SWT 2
B Swing JButton flackert trotz DoubleBufferings AWT, Swing, JavaFX & SWT 11
J Swing JEditorPane flackert AWT, Swing, JavaFX & SWT 2
H Swing JWindow flackert beim resizen AWT, Swing, JavaFX & SWT 6
Dragonfire ZoomImage flackert -> Fehler: repaint-Aufruf [gelöst] AWT, Swing, JavaFX & SWT 5
P Image auf JPanel flackert AWT, Swing, JavaFX & SWT 3
M DragAndDrop-Waypoints bewegen, ABER Bildschirm flackert AWT, Swing, JavaFX & SWT 3
B JPanel#paintComponent(Graphics g) << flackert oO AWT, Swing, JavaFX & SWT 3
J JProgressBar flackert AWT, Swing, JavaFX & SWT 14
C JScrollPane flackert AWT, Swing, JavaFX & SWT 10
F JScrollPane ruckelt/flackert AWT, Swing, JavaFX & SWT 5
S [Swing] Tabelle flackert AWT, Swing, JavaFX & SWT 8
Ernesto95 JavaFX JavaFX GUI mit sehr vielen Update requests AWT, Swing, JavaFX & SWT 4
P JTextField wird nur sehr klein angezeigt und verändert die Größe nicht AWT, Swing, JavaFX & SWT 3
E Java-TexturePaint sehr langsam AWT, Swing, JavaFX & SWT 9
S Swing Schrift sehr klein Ubuntu/eclipse AWT, Swing, JavaFX & SWT 18
Tommy135 JFileChooser ist sehr langsam AWT, Swing, JavaFX & SWT 13
MadMax2506 Swing JTable lädt sehr lange AWT, Swing, JavaFX & SWT 1
A JavaFX Sehr viele Exceptions bei Taschenrechner mit JavaFx AWT, Swing, JavaFX & SWT 2
RalleYTN Modaler Dialog und JTree Node mit sehr... seeeeehr vielen Elementen AWT, Swing, JavaFX & SWT 6
M Problem mit Layoutmanagern... Hilfe wäre sehr nett. AWT, Swing, JavaFX & SWT 2
J JavaFX Rendering von Canvas sehr langsam AWT, Swing, JavaFX & SWT 2
J Anfänger GUI Problem bei der Ausführung eines sehr einfachen Programms AWT, Swing, JavaFX & SWT 2
L [Slick2d] Sidescroller/Hintergrundbild sehr langsam AWT, Swing, JavaFX & SWT 3
E JavaFX Sehr viel und unterschiedlich Großen Inhalt auf einer "Fläche" ... Umsetzbar ? AWT, Swing, JavaFX & SWT 3
M JTable mit wechselnden Spalten - sehr Langsam AWT, Swing, JavaFX & SWT 5
E 3D-Grafik JOGL (lädt sehr lange) AWT, Swing, JavaFX & SWT 20
P sehr doll äußerst immens dringlich.... JFrame füllt sich nicht!!! AWT, Swing, JavaFX & SWT 5
R Image laden sehr langsam AWT, Swing, JavaFX & SWT 7
J Sehr schnell Text anzeigen? AWT, Swing, JavaFX & SWT 15
S Swing Swing macht sehr seltsame Zeichnungen. AWT, Swing, JavaFX & SWT 13
B JTree - sehr individuell AWT, Swing, JavaFX & SWT 3
J 2D-Grafik JPanel reagiert sehr träge AWT, Swing, JavaFX & SWT 3
V Swing remove(Component) blockiert Thread sehr lange. AWT, Swing, JavaFX & SWT 6
K Graphics.drawImage() sehr schnell AWT, Swing, JavaFX & SWT 5
A Swing JTextPane sehr langsam AWT, Swing, JavaFX & SWT 6
T JList / ListSelectionListener / sehr eigenartig AWT, Swing, JavaFX & SWT 11
R JPanel sehr große JPanel hinzufügen AWT, Swing, JavaFX & SWT 5
N Swing sehr großes Bild skalieren AWT, Swing, JavaFX & SWT 8
R JTable für sehr viele Daten sehr langsam AWT, Swing, JavaFX & SWT 20
R Ich suche einen sehr simplen. AWT, Swing, JavaFX & SWT 2
G Sehr kleine JButtons mit Icon oder Beschriftung AWT, Swing, JavaFX & SWT 2
S Bilder werden sehr langsam geladen AWT, Swing, JavaFX & SWT 4
W gridbaglayout streckt sich zu sehr. AWT, Swing, JavaFX & SWT 17
doctus img.getScaledInstance() sehr rechenintensiv und langsam? AWT, Swing, JavaFX & SWT 3
ARadauer spalten überschriften von jtable sehr klein AWT, Swing, JavaFX & SWT 2
C JButton + JFrame Reaktion SEHR langsam. AWT, Swing, JavaFX & SWT 2
S GridLayout mit sehr großen Abständen AWT, Swing, JavaFX & SWT 3
E sehr simpel AWT, Swing, JavaFX & SWT 6

Ähnliche Java Themen

Neue Themen


Oben