Hi liebes Forum,
ich versuche eine Spiele Engine für Java zu schreiben.
Dabei möchte ich die Spielszenenverwaltung mit meiner abstrakten Klasse scene lösen.
Erbende Klassen müssen die Methode update implementieren, die bei jedem Durchlauf ausgeführt werden soll.
Dazu gibt es eine Klasse die Global heißt. Sie verwaltet öffentliche Variabeln wie zB Global.scene.
In ihr steht die aktuelle Instanz von den Scene Klassen, die geupdatet wird.
Wird Global.scene auf null gesetzt, soll das Spiel beendet werden.
Funktioniert eigentlich gut, nur wenn ich dann einen AWT Frame einbaue laufe ich auf einen verwirrenden Umstand:
Er durchläuft die Hauptschleife nicht mehr. Gar nicht mehr. :/
Setze ich im Code des AWT Frames Global.scene auf null, reagiert die main Methode nicht mehr drauf.
Hier der src Code:
Ich hoffe mir kann geholfen werden, warum meine Schleife in main nur durchlaufen wird, wenn ich hinterher nen Debugpunkt drauf mache.
ich versuche eine Spiele Engine für Java zu schreiben.
Dabei möchte ich die Spielszenenverwaltung mit meiner abstrakten Klasse scene lösen.
Erbende Klassen müssen die Methode update implementieren, die bei jedem Durchlauf ausgeführt werden soll.
Dazu gibt es eine Klasse die Global heißt. Sie verwaltet öffentliche Variabeln wie zB Global.scene.
In ihr steht die aktuelle Instanz von den Scene Klassen, die geupdatet wird.
Wird Global.scene auf null gesetzt, soll das Spiel beendet werden.
Funktioniert eigentlich gut, nur wenn ich dann einen AWT Frame einbaue laufe ich auf einen verwirrenden Umstand:
Er durchläuft die Hauptschleife nicht mehr. Gar nicht mehr. :/
Setze ich im Code des AWT Frames Global.scene auf null, reagiert die main Methode nicht mehr drauf.
Hier der src Code:
Java:
public abstract class Main {
public static void main(final String[] args)
{
System.out.print("Starting...\n");
initiateConfig();
Global.window.show(true);
while(true){
if(Global.scene == null){
break;
}
else
Global.scene.update();
}
System.out.print("Closed.\n");
}
public static void initiateConfig(){
//Fenster mit Fenstergröße
Global.window = new Window(new Size(1280, 800));
//Startszene
Global.scene = new Scene_Title();
//Default Sprache
Global.language = new Lang_deDE();
}
}
Java:
public class Window extends Canvas {
// Attributes
private Frame frame;
private Size size;
private ArrayList<ImageContainer> imgList;
// Gets & Sets
public void setImageList(ArrayList<ImageContainer> imageList){
this.imgList = imageList;
}
// Constructors
public Window(){
init();
}
public Window(Size size){
this.size = size;
init();
}
// Methodes
private void init(){
frame = new Frame( "Das Fenster zur Welt" );
frame.setSize ( size.getX(), size.getY() );
frame.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
Global.scene = null;
Global.window.frame.dispose();
}
});
System.out.print("Title Screen displays.\nWelcome to the Game.\n");
}
public void show(boolean value){
frame.setVisible ( value );
}
public void paint(Graphics g) {
for(ImageContainer img :imgList)
g.drawImage(img.getImage(),img.getPosition().getX(),img.getPosition().getY(),this);
}
}
Java:
public abstract class Scene {
// Attributes
public int graphic_alpha;
protected ArrayList<ImageContainer> imgList = new ArrayList<ImageContainer>() ;
//Methods
public void routine(){
update();
draw();
}
public abstract void init();
public abstract void update();
public abstract void draw();
protected void addImage(ImageContainer img){
imgList.add(img);
Collections.sort(imgList);
}
protected ImageContainer getImage(int id){
return imgList.get(id);
}
}
Ich hoffe mir kann geholfen werden, warum meine Schleife in main nur durchlaufen wird, wenn ich hinterher nen Debugpunkt drauf mache.