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:
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?
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?