Package org.lwjgl.examples.spaceinvaders

Source Code of org.lwjgl.examples.spaceinvaders.GameApplet

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");
    }
  }
}
TOP

Related Classes of org.lwjgl.examples.spaceinvaders.GameApplet

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.