Problem: Mein Spiel lastet den PC voll aus

Status
Nicht offen für weitere Antworten.
I

Izibaar

Gast
und das hat zur Folge das man währenddessen keine Musik hören oder irgendetwas anderes machen kann. Hier mal mein Code:
Code:
import java.awt.*;
import java.awt.event.*;
import java.util.ArrayList;
import java.util.StringTokenizer;
import javax.swing.*;
import java.lang.Math;
import java.io.*;


public class Start extends JFrame {
  // Anfang Variablen
  private static Image dbImage;
  private Graphics dbGraphics;
  private Grafik grafiken = new Grafik();

  private static boolean spielEnde = false;
  private int ende;
  
  private long letzteZeit, letzteAktion1;
  private double deltaT;

    //Hier werden alle Schüsse abgelegt
  private ArrayList entities = new ArrayList();
    //Hier werden alle Gegner abgelegt
  private ArrayList arrayGegner = new ArrayList();

  private Raumschiff spieler1 = new Raumschiff("Raumschiff.gif");
  private boolean aktion1 = false;
  private double strecke = 0;

  // Ende Variablen


  public Start() {
    super("Der RzClon");
    int frameWidth = 10;
    int frameHeight = 10;
  
    // Einstellungen aus Datei lesen
    try {
      BufferedReader in = new BufferedReader(new FileReader("Einstellungen.txt"));
      StringTokenizer tokenizer;
      String zeile, daten[] = new String[2];
    
      for(int k=0; k<2; k++) {
        zeile=in.readLine();
        tokenizer = new StringTokenizer(zeile);
        for(int i=0; i<2; i++) {
          daten[i] = tokenizer.nextToken();
        }

        switch(k) {
          case 0: frameWidth = Integer.parseInt(daten[1]); break;
          case 1: frameHeight = Integer.parseInt(daten[1]); break;
        }
      }
    }
    catch(FileNotFoundException exc) {
      //Fehlermeldung
    }
    catch(IOException exc) {
      //Fehlermeldung
    }
    
    // Frame-Initialisierung
    addWindowListener(new WindowAdapter() {
      public void windowClosing(final WindowEvent evt)
      { System.exit(0); }
    });

    this.setUndecorated(true); //Ränder entfernen

    GraphicsDevice gd = GraphicsEnvironment.getLocalGraphicsEnvironment().getDefaultScreenDevice(); //Default-GraphicsDevice
    gd.setFullScreenWindow(this); //Vollbild
    DisplayMode dm_old = gd.getDisplayMode(); //Bildwiederholungsrate und Farbtiefe herausfinden
    DisplayMode dm_new = new DisplayMode (frameWidth, frameHeight, dm_old.getBitDepth(), dm_old.getRefreshRate()); //width, height, bitdepth, refreshrate
    gd.setDisplayMode(dm_new);

    // Anfang Komponenten
    addKeyListener(new KeyInputHandler());
    // Ende Komponenten

    //Mauszeiger ausblenden
    this.setCursor(Toolkit.getDefaultToolkit().createCustomCursor(Toolkit.getDefaultToolkit().getImage(""), new Point(0,0), "invisible"));
    

    setVisible(true);
    this.spielSchleife();
  }

  // Anfang Ereignisprozeduren
  private class KeyInputHandler extends KeyAdapter {
    public void keyPressed(KeyEvent e) {
      switch(e.getKeyCode()) {
        case KeyEvent.VK_LEFT:  spieler1.setLinks(true);  break;
        case KeyEvent.VK_RIGHT: spieler1.setRechts(true); break;
        case KeyEvent.VK_UP:    spieler1.setVor(true);    break;
        case KeyEvent.VK_DOWN:  spieler1.setZuruck(true); break;
        case KeyEvent.VK_SPACE: aktion1 = true;           break;
        default: break;
      }
    }

    public void keyReleased(KeyEvent e) {
      switch(e.getKeyCode()) {
        case KeyEvent.VK_LEFT:  spieler1.setLinks(false);  break;
        case KeyEvent.VK_RIGHT: spieler1.setRechts(false); break;
        case KeyEvent.VK_UP:    spieler1.setVor(false);    break;
        case KeyEvent.VK_DOWN:  spieler1.setZuruck(false); break;
        case KeyEvent.VK_SPACE: aktion1 = false;           break;
        default: break;
      }
    }
  }
  // Ende Ereignisprozeduren

  public void spielSchleife()
  {
    letzteAktion1 = 0;

    //Sounds laden
    StrippedSound schussSound = new StrippedSound(new File("Sounds/schuss1.wav")),
                  explosionSound = new StrippedSound(new File("Sounds/explosion1.wav")),
                  trefferSound = new StrippedSound(new File("Sounds/treffer1.wav"));

    schussSound.play();      schussSound.stop();
    explosionSound.play();   explosionSound.stop();
    trefferSound.play();     trefferSound.stop();
    
    grafiken.getSprite("Grafiken/Leiste_Energie.gif");
    grafiken.getSprite("Grafiken/Leiste.jpg");
    grafiken.getSprite("Grafiken/Gegner1.gif");
    grafiken.getSprite("Grafiken/Boden.jpg");
    grafiken.getSprite("Grafiken/Raumschiff.gif");
    grafiken.getSprite("Grafiken/Schuss1.gif");
    //grafiken.getSprite("Grafiken/Explosion.gif");
    
    repaint();
    while(!aktion1) {
      //Warten auf Leertaste
    }
    aktion1 = false;
    
    letzteZeit = System.currentTimeMillis();
    
    while(!spielEnde) {
      //Zeit stoppen
      deltaT = System.currentTimeMillis() - letzteZeit;
      letzteZeit = System.currentTimeMillis();

      strecke += deltaT/5;  //*2/10 = /5   -> Sollen 200m/s bzw 720Km/h entsprechen
      
      //Neue Gegner       /Immer 2 ??
      if(letzteZeit%2500 < 19) {
        Gegner gegner = new Gegner("Gegner1.gif", (int)(50+((letzteZeit%19)*50)));
        arrayGegner.add(gegner);
      }

      double zwischen1[] = new double[2],
             zwischen2[] = new double[2],
             abstand;

      //Raumschiffe bewegen
      spieler1.bewegen(deltaT);
      zwischen1 = spieler1.getPos();
      
      //Gegner bewegen (zwischen1 = spieler1)
      if(arrayGegner.size() >= 0)
        for (int i=0; i<arrayGegner.size(); i++) {
          Gegner gegner = (Gegner)arrayGegner.get(i);
          if(gegner.bewegen(deltaT)) arrayGegner.remove(i);
          
          zwischen2 = gegner.getPos();

          abstand = Math.pow( Math.pow(zwischen2[1]-zwischen1[1], 2) + Math.pow(zwischen2[0]-zwischen1[0], 2), 0.5);
          if(abstand < 35) {
            trefferSound.play();
            arrayGegner.remove(i);
            if(spieler1.treffer())
              spielEnde = true;
          }
        }

      //Schüsse erstellen (zwischen1 = spieler1)
      if(aktion1) {
        if(System.currentTimeMillis() - letzteAktion1 > 500) {
          Kugel schuss = new Kugel(zwischen1[0]-5, zwischen1[1], "Schuss1.gif");
          entities.add(schuss);
          letzteAktion1 = System.currentTimeMillis();
          
          schussSound.play();
        }
      }
      //Schüsse bewegen
      if(entities.size() >= 0)
        for (int i=0; i<entities.size(); i++) {
          Kugel schuss = (Kugel)entities.get(i);
          if(schuss.bewegen(deltaT)) entities.remove(i);
          
          zwischen1 = schuss.getPos();

          //Abfrage Gegner getroffen
          if(arrayGegner.size() >= 0)
          for (int k=0; k<arrayGegner.size(); k++) {
            Gegner gegner = (Gegner)arrayGegner.get(k);
            
            zwischen2 = gegner.getPos();

            abstand = Math.pow( Math.pow(zwischen2[1]-zwischen1[1], 2) + Math.pow(zwischen2[0]-zwischen1[0], 2), 0.5);
            if(abstand < 20) {
              explosionSound.play();
              arrayGegner.remove(k);
              entities.remove(i);
              spieler1.setPunkte();
            }
          }//Abfrage Gegner getroffen
        }

      //Neues Bild zeichnen
      repaint();

      //Nur wenn 1 Millisekunde vergangen ist weiter machen
      while(System.currentTimeMillis()-(letzteZeit) < 1) {
        //warten
      }
    }
    
    //Ende
    for(ende=0; ende<150; ende+=30) {

      repaint();
      
      while(System.currentTimeMillis()-(letzteZeit) < 150) {
        //150 Millisekunden warten
      }
      letzteZeit = System.currentTimeMillis();
    }
    repaint();
    while(System.currentTimeMillis()-(letzteZeit) < 2000) {
      //2 Sekunden warten
    }

    System.exit(0);
  }

  //-----Bild überzeichnen-----
  public void update(Graphics g)
  {
    //Double-Buffer initialisieren
    if (dbImage == null) {
      dbImage = createImage(this.getSize().width, this.getSize().height);
      dbGraphics = dbImage.getGraphics();
    }

    //Hintergrund löschen
    dbGraphics.setColor(getBackground());
    dbGraphics.fillRect( 0, 0, this.getSize().width, this.getSize().height);

    //Vordergrund zeichnen
    dbGraphics.setColor(getForeground());
    paint(dbGraphics);

    //Offscreen anzeigen
    g.drawImage(dbImage,0,0,this);
  }


//-----Bild erstellen zum überzeichnen-----
  public void paint(Graphics g)
  {
   //** Hier werden alle noch mehr Bilder gezeichnet **
    g.drawImage(grafiken.getSprite("Grafiken/Boden.jpg"), 0, -300+(int)(b), this);
   
  }
  
  public static void main(String[] args) {
    Start fenster = new Start();
  }
}

Habe die paint Methode gekürzt und mal nur ein Beispiel drinne gelassen wie ich alle Bilder zeichne.
Bin leider Anfänger auf dem Gebiet der Spieleprogrammierung. Kann mir jemand sagen warum der PC (nicht nur meiner) vollkommen ausgelastet wird?
 

Wildcard

Top Contributor
1. In Swing überschreibt man die update methode nicht (JFrame ist sowieso doppelt gepuffert)
2. In Swing überschreibt man nicht paint(), sonder paintComponent()
3. Mach das weg und ersetze es durch Thread.sleep();
Code:
    for(ende=0; ende<150; ende+=30) { 

      repaint(); 
      
      while(System.currentTimeMillis()-(letzteZeit) < 150) { 
        //150 Millisekunden warten 
      } 
      letzteZeit = System.currentTimeMillis(); 
    } 
    repaint(); 
    while(System.currentTimeMillis()-(letzteZeit) < 2000) { 
      //2 Sekunden warten 
    }
 
G

Guest

Gast
zu 1./4. Wenn ich die update Methide nicht überschreibe dann flimmert es. Außer ich verwende BufferStrategy. Nur dann ruckelt es und es dauert teilweise etwas bis die Tastatur reagiert. Desweiteren funktioniert die Kollisionsabfrage nicht mehr zu 100%.

Danke für die Tipps, aber entweder hab ich schon zuviel Müll geschrieben oder ich verstehe die Verwendung nicht richtig. Jedenfalls wird das bei mir nur langsamer.
 
I

Izibaar

Gast
Der Gast da oben war natürlich ich.
Und dann noch was: Seit heute läuft es besser. Scheinbar habe ich irgendwas gemacht damit es funktioniert. Bin mir zwar nicht bewusst, dass ich etwas gemacht habe das es besser laufen sollte... aber immerhin.
Könnte aber auch seien das es nur heute ist :roll: also für Tipps bin ich immer dankbar.
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
G Mein erstes minigame -> problem mit Methode Spiele- und Multimedia-Programmierung 3
A [HILFE] - Minecraft-Problem! Spiele- und Multimedia-Programmierung 1
C Plugin Problem Spiele- und Multimedia-Programmierung 2
J JLayer Problem Spiele- und Multimedia-Programmierung 1
Meeresgott LWJGL 3 Problem mit einer Texture Spiele- und Multimedia-Programmierung 4
G Low Poly 3D LWJGL Shader Problem Spiele- und Multimedia-Programmierung 4
O Problem beim Aufrufen des Spiels von einem Menü Spiele- und Multimedia-Programmierung 7
G LIBGDX Texturen Problem Spiele- und Multimedia-Programmierung 1
G LIBGDX Problem beim resizen des Frames Spiele- und Multimedia-Programmierung 3
C AutoClicker Problem Spiele- und Multimedia-Programmierung 2
S OOP Logik Problem Spiele- und Multimedia-Programmierung 5
G LIBGDX Viewport Problem Spiele- und Multimedia-Programmierung 3
J Problem mit Game Of Life Spiele- und Multimedia-Programmierung 3
N Problem mit 2D Spiel Spiele- und Multimedia-Programmierung 17
C Minecraft Minecraft Plugin Problem Spiele- und Multimedia-Programmierung 17
R Pong Spiel Problem Spiele- und Multimedia-Programmierung 1
V Problem mit BufferStrategy Spiele- und Multimedia-Programmierung 2
Streeber Problem mit Transparenz/TextDrawing in LWJGL/Slick2d (OpenGL) Spiele- und Multimedia-Programmierung 1
E A-Stern Algorithmus Problem und Implementierung einer Map Spiele- und Multimedia-Programmierung 6
T LWJGL 2.9.2: Seltsamer Effekt beim Rendern (VertexShader Problem?) Spiele- und Multimedia-Programmierung 3
W Generelles Problem: Entscheidungsfindung Spiele- und Multimedia-Programmierung 4
T Problem bei Kollisionsabfrage Spiele- und Multimedia-Programmierung 4
C Vier Gewinnt Problem mit Ordnerstruktur Spiele- und Multimedia-Programmierung 2
T Problem mit Eclipse (java)-(minecraft) Spiele- und Multimedia-Programmierung 3
I Textbasiertes Spiel - Umsetzungsfrage & Schleifen Problem Spiele- und Multimedia-Programmierung 26
M Sound Problem Spiele- und Multimedia-Programmierung 3
T Problem beim Aufbau des Spielfelds Spiele- und Multimedia-Programmierung 18
M Sound Engin Problem 2 Spiele- und Multimedia-Programmierung 2
J Problem bei der GUI - Zu viele Spielbretter Spiele- und Multimedia-Programmierung 2
D LWJGL gluLookAt "Umschauen" Problem Spiele- und Multimedia-Programmierung 0
D Problem mit Würfelanimierung in LWJGL Spiele- und Multimedia-Programmierung 7
C Zeldaklon Problem mit Wand-Kollision Spiele- und Multimedia-Programmierung 8
0 Boxen übereinander stapelt Problem Spiele- und Multimedia-Programmierung 5
D Textfield im Game ,Problem: while-Schleife Spiele- und Multimedia-Programmierung 3
R 2D platformer - enemy damage -> TIMER PROBLEM Spiele- und Multimedia-Programmierung 3
S LWJGL Kamera Problem - Alles verzerrt Spiele- und Multimedia-Programmierung 4
B LWJGL StackOverFlow Problem nach 30sekunden. (Pong) Spiele- und Multimedia-Programmierung 2
Seikuassi LWJGL-Problem Spiele- und Multimedia-Programmierung 2
L Minecraft Minecraft Plugin programmieren (Craftbukkit 1.7.2) Problem Spiele- und Multimedia-Programmierung 4
B Minecraft mehr Ram zuweißen Problem Spiele- und Multimedia-Programmierung 0
K Bukkit Plugin Problem Spiele- und Multimedia-Programmierung 3
Y Problem mit repaint() in run() Spiele- und Multimedia-Programmierung 2
X Kleines Problem mit Java Reflections und einem eigenen Eventhandler Spiele- und Multimedia-Programmierung 1
T Problem mit Kollisionsabfrage der NPC Spiele- und Multimedia-Programmierung 1
J Minecraft Problem mit dem JRE - Minecraft Spiele- und Multimedia-Programmierung 3
TheSorm Problem mit 2 classen NullPointerException Spiele- und Multimedia-Programmierung 1
S Problem mit 4 gewinnt(MinMax Algorithmus) Spiele- und Multimedia-Programmierung 2
N Problem in der Main.class Spiele- und Multimedia-Programmierung 1
J Blöcke, Hitboxen, Koolisionsabfrage - Problem Spiele- und Multimedia-Programmierung 8
S Problem mit 3d-Polygon Spiele- und Multimedia-Programmierung 2
A Problem mit Sound Spiele- und Multimedia-Programmierung 5
C Nxt Duell Problem Spiele- und Multimedia-Programmierung 4
F LWJGL Problem mit Erstellen eines Objekts und der Kamera Spiele- und Multimedia-Programmierung 5
ruerob Problem bei Fade-Out von Sounds Spiele- und Multimedia-Programmierung 3
L [Slick2D] Problem bei Speicherfreigabe Spiele- und Multimedia-Programmierung 2
M Bukkit Plugin Problem Spiele- und Multimedia-Programmierung 22
T Java3D Rendering Problem Spiele- und Multimedia-Programmierung 7
J Problem bei pixelgenauer Kollisionsabfrage Spiele- und Multimedia-Programmierung 10
F Problem mit dem Abspielen von byte[] (Audioprogrammierung) Spiele- und Multimedia-Programmierung 2
C Problem mit Abspielen von Audio-Dateien Spiele- und Multimedia-Programmierung 3
R Problem bei Farbe ändern/4Gewinnt Spiele- und Multimedia-Programmierung 5
R StringIndexOutOfBoundsException - Problem Spiele- und Multimedia-Programmierung 2
S Problem mit Sichtfeld/Licht in einem Raster Spiele- und Multimedia-Programmierung 5
G Acht-Damen-Problem HILFE! Spiele- und Multimedia-Programmierung 11
A TileMap KeyListener - Problem Spiele- und Multimedia-Programmierung 2
J Problem mit Threads Spiele- und Multimedia-Programmierung 8
N Problem mit Kollisionsabfrage beim Fallen Jump & Run Spiele- und Multimedia-Programmierung 5
S Problem mit Zeitsteuerung der Game Loop Spiele- und Multimedia-Programmierung 4
Fu3L Problem mit 3D Noise Spiele- und Multimedia-Programmierung 4
L Problem beim Rätsellöser Spiele- und Multimedia-Programmierung 3
D Problem beim bewegen einer Figur Spiele- und Multimedia-Programmierung 2
T Problem bei LinkedList / JPanel Spiele- und Multimedia-Programmierung 4
T Problem mit ClassLoader und LWJGL Spiele- und Multimedia-Programmierung 5
M Scrolling Repaint Problem Spiele- und Multimedia-Programmierung 2
Samake03 [Problem] layeredPane bzw. Viewport Spiele- und Multimedia-Programmierung 3
Helgon glTexParameter / glTexImage2D Problem Spiele- und Multimedia-Programmierung 11
T Jmonkey opengl problem Spiele- und Multimedia-Programmierung 13
M Problem mit Kamera (glMultMatrix (OpenGL/ LWJGL)/ Quaternionen) Spiele- und Multimedia-Programmierung 5
M Problem mit Gameserver / Datensynchronisation Spiele- und Multimedia-Programmierung 10
X Geometry Wars Clone Problem Spiele- und Multimedia-Programmierung 4
H Problem mit JMonkeyEngine3 und OgreXML Spiele- und Multimedia-Programmierung 3
D [JOGL 2.0] Kleines Problem mit freier Flugsteuerung Spiele- und Multimedia-Programmierung 3
A JAVA3D TransformGroup <--> Group Problem Spiele- und Multimedia-Programmierung 3
U [JOGL 1.1.1a]Kleines Problem mit Text Overlays: Spiele- und Multimedia-Programmierung 19
T Problem mit JnR-Steuerung / KeyListener Spiele- und Multimedia-Programmierung 6
D Problem Mit Miensweeper Clone & rekursive Methode Spiele- und Multimedia-Programmierung 4
M Performance Problem bei BufferedImage Spiele- und Multimedia-Programmierung 7
T Problem mit Speicherverbrauch Spiele- und Multimedia-Programmierung 5
S Programmstruktur Problem! Spiele- und Multimedia-Programmierung 8
BattleMaster246 Problem mit Jogl Spiele- und Multimedia-Programmierung 14
C MP3 Handler-Problem Spiele- und Multimedia-Programmierung 13
C [gelöst] MP3-Codec-Problem Spiele- und Multimedia-Programmierung 2
K Schiebepuzzle Array Zufallszahlen Problem Spiele- und Multimedia-Programmierung 8
J Java 3D Problem Spiele- und Multimedia-Programmierung 2
G Eclipse Problem mit Java3d Spiele- und Multimedia-Programmierung 3
H Repaint-Problem mit Quaxlis Tutorial Spiele- und Multimedia-Programmierung 2
C Java Sound API Clip.Close() Problem Spiele- und Multimedia-Programmierung 1
K Problem beim Anzeigen von Bildern Spiele- und Multimedia-Programmierung 5
D Problem mit Überprüfung beim Lottospiel Spiele- und Multimedia-Programmierung 6
D Problem beim Öffnen einer PHP für eine Highscore Spiele- und Multimedia-Programmierung 5

Ähnliche Java Themen

Neue Themen


Oben