Hi, ich habe ein altes Pacman-Javaprogramm hervorgeholt, früher hat es funktioniert. Jetzt gehts nicht mehr. Die Tastatureingaben über den Keylistener funktioniert nicht mehr.
Wenn ich JApplet durch Applet ersetze, dann geht es, aber das Bild flimmert.
Wie muss ich den Code anpassen, damit es mit JApplet klappt?
Übrigens wenn ich einen Mouselistener benutze, funktionieren die Mauseingaben auch im JApplet, aber eben nicht die Tastatureingaben. Ich glaube, das JApplet verliert irgendwie den Focus. Hier ist der Code der Hauptklasse. Danke für mögliche Antworten:
Wenn ich JApplet durch Applet ersetze, dann geht es, aber das Bild flimmert.
Wie muss ich den Code anpassen, damit es mit JApplet klappt?
Übrigens wenn ich einen Mouselistener benutze, funktionieren die Mauseingaben auch im JApplet, aber eben nicht die Tastatureingaben. Ich glaube, das JApplet verliert irgendwie den Focus. Hier ist der Code der Hauptklasse. Danke für mögliche Antworten:
Java:
import java.applet.*;
import java.awt.*;
import javax.swing.*;
import java.io.*;
import java.awt.Graphics;
import java.awt.Event;
import java.awt.Font;
import java.awt.Color;
import java.awt.event.*;
public class Pacman extends JApplet implements KeyListener{
Punkte punkte = new Punkte();
Spieler spieler = new Spieler();
Gegner gegner = new Gegner();
int Zeit = 200;
int breite = 40;
int RichtungNeu = 0;
Level level = new Level();
Image bild;
AudioClip Space;
public void init() { // Spielstart
addKeyListener(this);
try {level.levellesen("Level 1.txt", punkte, gegner);}
catch(IOException e){System.out.println("Es ist ein Fehler beim lesen aufgetreten\n" + e);}
MediaTracker mt = new MediaTracker(this);
this.setSize(java.awt.Toolkit.getDefaultToolkit().getScreenSize());
}
public void SoundAbspielen(String SoundDatei) { // Spielklänge
Space = getAudioClip(getCodeBase(), SoundDatei);
Space.play(); }
public void keyReleased(KeyEvent e) { // Tastatureingabe
spieler.setzeRichtungMerken(spieler.gibRichtung());
if(level.gibLevelBeendet() == 1) level.setzeLevelBeendet(0);
if (e.getKeyCode() == 'a') RichtungNeu = 3;
if (e.getKeyCode() == KeyEvent.VK_LEFT) RichtungNeu = 1;
if (e.getKeyCode() == KeyEvent.VK_UP) RichtungNeu = 2;
if (e.getKeyCode() == KeyEvent.VK_DOWN) RichtungNeu = 4; }
public void paint(Graphics g) { // Spielschleife und Grafische Darstellung
int xpaint, ypaint;
// Spielschleife
if(RichtungNeu == 4 && level.gibFeld(level.gibX(), level.gibY()+1) != 2) {spieler.setzeRichtung(4); RichtungNeu = 0;}
if(RichtungNeu == 3 && level.gibFeld(level.gibX()+1, level.gibY()) != 2) {spieler.setzeRichtung(3); RichtungNeu = 0;}
if(RichtungNeu == 2 && level.gibFeld(level.gibX(), level.gibY()-1) != 2) {spieler.setzeRichtung(2); RichtungNeu = 0;}
if(RichtungNeu == 1 && level.gibFeld(level.gibX()-1, level.gibY()) != 2) {spieler.setzeRichtung(1); RichtungNeu = 0;}
if(spieler.gibRichtung() == 5) spieler.PacmanBewegung(0, level, spieler, punkte, gegner);
if(spieler.gibRichtung() == 1) spieler.PacmanBewegung(1, level, spieler, punkte, gegner);
if(spieler.gibRichtung() == 2) spieler.PacmanBewegung(2, level, spieler, punkte, gegner);
if(spieler.gibRichtung() == 3) spieler.PacmanBewegung(3, level, spieler, punkte, gegner);
if(spieler.gibRichtung() == 4) spieler.PacmanBewegung(4, level, spieler, punkte, gegner);
gegner.GegnerBewegung(1, level, spieler, punkte, gegner);
gegner.GegnerBewegung(2, level, spieler, punkte, gegner);
gegner.GegnerBewegung(3, level, spieler, punkte, gegner);
gegner.GegnerBewegung(4, level, spieler, punkte, gegner);
// Grafische Darstellung
xpaint = 0;
ypaint = 0;
for(int t = 1; t<=2; t++) {
xpaint = 0;
ypaint = 0;
for(int n = 0; n<=level.gibZeichenAnzahl()-1; n++) {
for(int k = 0; k<=level.gibZeichenAnzahl()-1; k++) {
if(level.gibFeld(k, n)==1) {if(t==1) bild = getImage(getCodeBase(),"./stern1.jpg"); if(t==2) bild = getImage(getCodeBase(),"./stern2.jpg");}
if(level.gibFeld(k, n)==2) bild = getImage(getCodeBase(),"./mauer.jpg");
if(level.gibFeld(k, n)==3) bild = getImage(getCodeBase(),"./leer.jpg");
if(level.gibFeld(k, n)==4) bild = getImage(getCodeBase(),"./pacman2.jpg");
if(level.gibFeld(k, n)==5) bild = getImage(getCodeBase(),"./gegner.jpg");
g.drawImage(bild, xpaint, ypaint, breite, breite, this);
xpaint = xpaint + breite;
}
ypaint = ypaint + breite;
xpaint = 0;
}
// Animation von Pacman
if(t==1 && spieler.gibRichtung() == 1) {
bild = getImage(getCodeBase(),"./leer.jpg");
g.drawImage(bild, level.gibX()*breite, level.gibY()*breite, breite, breite, this);
g.drawImage(bild, (level.gibX()+1)*breite, level.gibY()*breite, breite, breite, this);
bild = getImage(getCodeBase(),"./pacman1.jpg");
g.drawImage(bild, (int) ((level.gibX()+0.5)*breite), level.gibY()*breite, breite, breite, this); }
if(t==1 && spieler.gibRichtung() == 2) {
bild = getImage(getCodeBase(),"./leer.jpg");
g.drawImage(bild, level.gibX()*breite, level.gibY()*breite, breite, breite, this);
g.drawImage(bild, level.gibX()*breite, (level.gibY()+1)*breite, breite, breite, this);
bild = getImage(getCodeBase(),"./pacman1.jpg");
g.drawImage(bild, level.gibX()*breite, (int) ((level.gibY()+0.5)*breite), breite, breite, this); }
if(t==1 && spieler.gibRichtung() == 3) {
bild = getImage(getCodeBase(),"./leer.jpg");
g.drawImage(bild, level.gibX()*breite, level.gibY()*breite, breite, breite, this);
g.drawImage(bild, (level.gibX()-1)*breite, level.gibY()*breite, breite, breite, this);
bild = getImage(getCodeBase(),"./pacman1.jpg");
g.drawImage(bild, (int) ((level.gibX()-0.5)*breite), level.gibY()*breite, breite, breite, this); }
if(t==1 && spieler.gibRichtung() == 4) {
bild = getImage(getCodeBase(),"./leer.jpg");
g.drawImage(bild, level.gibX()*breite, level.gibY()*breite, breite, breite, this);
g.drawImage(bild, level.gibX()*breite, (level.gibY()-1)*breite, breite, breite, this);
bild = getImage(getCodeBase(),"./pacman1.jpg");
g.drawImage(bild, level.gibX()*breite, (int) ((level.gibY()-0.5)*breite), breite, breite, this); }
repaint();
try { Thread.sleep( (int)(0.5*Zeit));}
catch (InterruptedException e) {} }
g.setColor(Color.YELLOW);
g.fillRect(0, ypaint, breite * level.gibZeichenAnzahl(), 100);
g.setColor(Color.BLACK);
g.drawString("Punkte = " + punkte.gibPunkte(), 0, ypaint + 20);
g.drawString("Versuche = " + level.gibVersuche(), 0, ypaint + 2*20);
if(level.gibLevelBeendet() == 1) g.drawString("Sie haben das Level beendet!", 0, ypaint + 3*20);
}
public void keyPressed(KeyEvent e) {}
public void keyTyped(KeyEvent e) {}
}