witam,
mam pytanie dotyczace pisania gier, chcialbym zrobic zeby po zaladowaniu gry wyswietlilo mi sie menu w ktorym moge sobie wybrac jakies tam opcje w stylu nowa gra, napisalem klasy (glowna zawierajaca JFrame, klase menu i klase etap odpowiadajaca za wszystkie zdazenia z gry), jednak kiedy dodam KeyListener do klasy menu to w klasie etap juz nie moge z niego korzystac. Prawdopodobnie musze jakos usunac obiekt klasy menu po rozpoczeciu gry, ale nie wiem za bardzo jak i tu moje pytanie czy jest na to jakis efektywny sposob?
klasa glowna
import javax.swing.JFrame;
import java.awt.event.WindowEvent;
import java.awt.event.WindowAdapter;
public class SpaceRocks{
public static final int WIDTH = 800;
public static final int HEIGHT = 600;
public static final int SPEED = 10;
public JFrame ramka;
public SpaceRocks(){
ramka = new JFrame("Space Rocks");
ramka.setBounds(0, 0, WIDTH, HEIGHT);
ramka.setVisible(true);
ramka.addWindowListener( new WindowAdapter() {
public void windowClosing(WindowEvent e){
System.exit(0);
}
});
ramka.setResizable(false);
}
public static void main(String[] args){
SpaceRocks gra = new SpaceRocks();
menu Menu = new menu (gra);
}
}
klasa menu
import java.awt.Canvas;
import java.awt.event.KeyListener;
import java.awt.event.KeyEvent;
import javax.swing.JPanel;
import java.awt.Dimension;
import java.awt.Color;
import java.awt.Graphics;
public class menu extends Canvas implements KeyListener{
private SpaceRocks program;
public menu(SpaceRocks program) {
this.program = program;
JPanel panel = (JPanel)program.ramka.getContentPane();
setBounds(0,0,WIDTH,HEIGHT);
panel.setPreferredSize(new Dimension(WIDTH,HEIGHT));
panel.setLayout(null);
panel.add(this);
requestFocus();
addKeyListener(this);
}
public void keyPressed(KeyEvent e) {
switch (e.getKeyCode()) {
case KeyEvent.VK_SPACE:removeKeyListener(this);etap pierwszy = new etap(program); break;
}
}
public void keyReleased(KeyEvent e) {
}
public void keyTyped(KeyEvent e) {}
}
klasa etap
import java.awt.Canvas;
import java.awt.event.KeyListener;
import java.awt.event.WindowAdapter;
import java.awt.Dimension;
import java.awt.event.WindowEvent;
import javax.swing.JFrame;
import java.awt.Graphics;
import java.awt.Color;
import javax.swing.JPanel;
import java.awt.image.BufferStrategy;
import java.util.ArrayList;
import java.awt.Graphics2D;
import java.awt.event.KeyEvent;
import java.awt.Rectangle;
public class etap extends Canvas implements KeyListener{
public static final int WIDTH = 800;
public static final int HEIGHT = 600;
public static final int SPEED = 10;
private int iledodac;
private BufferStrategy strategy;
private SpriteCache obrazki;
private ArrayList postacie;
private gracz gracz1;
private int gameover;
SpaceRocks program;
public void keyPressed(KeyEvent e) {
gracz1.wcisniety(e);
}
public void keyReleased(KeyEvent e) {
gracz1.puszczony(e);
}
public void keyTyped(KeyEvent e) {}
public void tworzswiat(){
postacie = new ArrayList();
iledodac = 1;
}
public etap(SpaceRocks program) {
this.program = program;
obrazki = new SpriteCache();
JPanel panel = (JPanel)program.ramka.getContentPane();
setBounds(0,0,WIDTH,HEIGHT);
panel.setPreferredSize(new Dimension(WIDTH,HEIGHT));
panel.setLayout(null);
panel.add(this);
createBufferStrategy(2);
strategy = getBufferStrategy();
requestFocus();
gracz1 = new gracz(this);
gameover = 0;
addKeyListener(this);
gameloop();
}
public void setgameover() {
gameover = 1;
}
public void gameloop(){
int z = 0;
tworzswiat();
while (isVisible() && gameover != 1){
odswiez();
sprawdzzderzenia();
rysuj();
if (z % 100 == 0)
dodajprzeciwnika();
z++;
try {
Thread.sleep(SPEED);
} catch (InterruptedException e) {}
}
menu Menu = new menu(program);
}
}