104 lines
2.4 KiB
Java
104 lines
2.4 KiB
Java
package org.lwjgl.examples.spaceinvaders;
|
|
|
|
|
|
import java.applet.Applet;
|
|
import java.awt.BorderLayout;
|
|
import java.awt.Canvas;
|
|
import org.lwjgl.LWJGLException;
|
|
import org.lwjgl.opengl.Display;
|
|
|
|
public class GameApplet extends Applet {
|
|
|
|
/** The Canvas where the LWJGL Display is added */
|
|
Canvas display_parent;
|
|
|
|
/** Thread which runs the main game loop */
|
|
Thread gameThread;
|
|
|
|
/** The Game instance */
|
|
Game game;
|
|
|
|
/**
|
|
* Once the Canvas is created its add notify method will call this method to
|
|
* start the LWJGL Display and game loop in another thread.
|
|
*/
|
|
public void startLWJGL() {
|
|
gameThread = new Thread() {
|
|
public void run() {
|
|
|
|
try {
|
|
Display.setParent(display_parent);
|
|
|
|
} catch (LWJGLException e) {
|
|
e.printStackTrace();
|
|
}
|
|
// start game
|
|
game = new Game(false);
|
|
game.execute();
|
|
}
|
|
};
|
|
gameThread.start();
|
|
}
|
|
|
|
|
|
/**
|
|
* Tell game loop to stop running, after which the LWJGL Display will be destoryed.
|
|
* The main thread will wait for the Display.destroy() to complete
|
|
*/
|
|
private void stopLWJGL() {
|
|
Game.gameRunning = false;
|
|
try {
|
|
gameThread.join();
|
|
} catch (InterruptedException e) {
|
|
e.printStackTrace();
|
|
}
|
|
}
|
|
|
|
public void start() {
|
|
|
|
}
|
|
|
|
public void stop() {
|
|
|
|
}
|
|
|
|
/**
|
|
* Applet Destroy method will remove the canvas, before canvas is destroyed it will notify
|
|
* stopLWJGL() to stop main game loop and to destroy the Display
|
|
*/
|
|
public void destroy() {
|
|
remove(display_parent);
|
|
super.destroy();
|
|
System.out.println("Clear up");
|
|
}
|
|
|
|
/**
|
|
* initialise applet by adding a canvas to it, this canvas will start the LWJGL Display and game loop
|
|
* in another thread. It will also stop the game loop and destroy the display on canvas removal when
|
|
* applet is destroyed.
|
|
*/
|
|
public void init() {
|
|
setLayout(new BorderLayout());
|
|
try {
|
|
display_parent = new Canvas() {
|
|
public void addNotify() {
|
|
super.addNotify();
|
|
startLWJGL();
|
|
}
|
|
public void removeNotify() {
|
|
stopLWJGL();
|
|
super.removeNotify();
|
|
}
|
|
};
|
|
display_parent.setSize(getWidth(),getHeight());
|
|
add(display_parent);
|
|
display_parent.setFocusable(true);
|
|
display_parent.requestFocus();
|
|
display_parent.setIgnoreRepaint(true);
|
|
setVisible(true);
|
|
} catch (Exception e) {
|
|
System.err.println(e);
|
|
throw new RuntimeException("Unable to create display");
|
|
}
|
|
}
|
|
} |