📄 maingamethread.java
字号:
package tankgame;
/*
* Created on 2005-1-8
*
*/
import java.util.Vector;
import java.util.Properties;
import java.awt.*;
import java.awt.image.BufferStrategy;
import java.io.*;
import javax.swing.*;
import ui.GameFrame;
import ui.GameFrame_keyAdapter;
import resource.ResourceFactory;
import components.*;
/**
* @author Emtry Immortal
*/
public class MainGameThread {
GameFrame winFrame;
JPanel m_grCv = null;
Vector vContainer = new Vector();
Tank gmTank = null;
ICamera camera = null;
protected Controller controller = new Controller();
protected Properties prpUser = new Properties();
private boolean isPlaying = true;
//frame pack
boolean packFrame = true;
ResourceFactory resource;
BufferStrategy bufferStrategy = null;
GraphicsDevice graphicsDevice = null;
DisplayMode originalDisplayMode = null;
boolean isFullScreen=true;
/**
*
*/
public MainGameThread() {
super();
}
public void initGame() {
resource = ResourceFactory.getInstance();
if (camera != null) {
return;
}
//clear container
vContainer.removeAllElements();
//read user properties
try {
prpUser.load(new FileInputStream("configure" + File.separator
+ "User.properties"));
} catch (IOException e) {
e.printStackTrace();
prpUser.setProperty("UserName", "Player");
}
loadMap("Battle.map");
initScreen();
}
/*
* (non-Javadoc)
*
* @see java.lang.Runnable#run()
*/
public void run() {
long imsec, imsec2;
try {
while (isPlaying) {
//imsec=System.currentTimeMillis();
controller.doKeyInput();
update();
//camera.view((Graphics2D)m_grCv.getGraphics());
Graphics2D g2D = (Graphics2D) bufferStrategy.getDrawGraphics();
camera.view(g2D);
bufferStrategy.show();
//g2D.dispose();
/*
* imsec2=System.currentTimeMillis()-imsec+1;
* ((TrackCamera)camera).fps=1000/imsec2; imsec=1000/60-imsec2;
* if(imsec <0){ continue; }
*/
Thread.sleep(16);
}
} catch (InterruptedException e) {
} finally {
if(isFullScreen){
graphicsDevice.setDisplayMode(originalDisplayMode);
graphicsDevice.setFullScreenWindow(null);
}
}
}
private void update() {
for (int i = 0; i < vContainer.size(); i++) {
((GmComponent) vContainer.get(i)).updateOject();
}
}
/**
* @return Returns the camera.
*/
public ICamera getCamera() {
return camera;
}
private void loadMap(String map) {
BattleMapLoader.readMap(map, this.vContainer);
}
public void windowsMode() {
winFrame = new GameFrame("Tank_Game", controller, this);
Canvas renderCanvas;
winFrame.setResizable(false);
if (packFrame) {
winFrame.pack();
} else {
winFrame.validate();
}
renderCanvas = new Canvas() {
public Dimension getPreferredSize() {
return new Dimension(800, 600);
}
};
renderCanvas.setIgnoreRepaint(true);
winFrame.getContentPane().add(renderCanvas,BorderLayout.CENTER);
winFrame.setSize(new Dimension(800, 600));
winFrame.setVisible(true);
renderCanvas.createBufferStrategy(2);
bufferStrategy = renderCanvas.getBufferStrategy();
camera = new TrackRender(800,600, gmTank, this.vContainer);
controller.setCamera(camera);
//add adapter
renderCanvas.addMouseMotionListener
(new ui.GameFrame_mouseMotionAdapter(controller));
renderCanvas.addMouseListener
(new ui.GameFrame_mouseAdapter(controller));
GameFrame_keyAdapter lsk=new GameFrame_keyAdapter(controller);
renderCanvas.addKeyListener(lsk);
winFrame.addKeyListener(lsk);
//Center the window
Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
Dimension frameSize = winFrame.getSize();
if (frameSize.height > screenSize.height) {
frameSize.height = screenSize.height;
}
if (frameSize.width > screenSize.width) {
frameSize.width = screenSize.width;
}
winFrame.setLocation((screenSize.width - frameSize.width) / 2,
(screenSize.height - frameSize.height) / 2);
}
public void quitGame() {
}
/**
* @param isPlaying
* The isPlaying to set.
*/
public void setPlaying(boolean isPlaying) {
this.isPlaying = isPlaying;
}
private void initScreen() {
int mode=Integer.parseInt(prpUser.getProperty("DisplayMode"));
//full screen
isFullScreen=prpUser.getProperty("FullScreen").equals("1");
if (isFullScreen) {
fullScreenMode(mode);
} else {
windowsMode();
}
}
private void fullScreenMode(int mode) {
GraphicsEnvironment graphicsEnvironment = GraphicsEnvironment
.getLocalGraphicsEnvironment();
graphicsDevice = graphicsEnvironment.getDefaultScreenDevice();
DisplayMode displayModes[] = graphicsDevice.getDisplayModes();
originalDisplayMode = graphicsDevice.getDisplayMode();
winFrame = new GameFrame("Tank_Game", controller, this);
winFrame.setUndecorated(true);
winFrame.setIgnoreRepaint(true);
try {
if (graphicsDevice.isFullScreenSupported()) {
graphicsDevice.setFullScreenWindow(winFrame);
}
//800 x 600 32 85Hz
DisplayMode displayMode = displayModes[mode];
camera = new TrackRender(displayMode.getWidth(), displayMode
.getHeight(), gmTank, this.vContainer);
controller.setCamera(camera);
if (graphicsDevice.isDisplayChangeSupported()) {
graphicsDevice.setDisplayMode(displayMode);
}
winFrame.createBufferStrategy(2);
bufferStrategy = winFrame.getBufferStrategy();
//add adapter
winFrame.addMouseMotionListener
(new ui.GameFrame_mouseMotionAdapter(controller));
winFrame.addMouseListener
(new ui.GameFrame_mouseAdapter(controller));
winFrame.addKeyListener
(new GameFrame_keyAdapter(controller));
} catch (Exception e) {
//e.printStackTrace();
graphicsDevice.setDisplayMode(originalDisplayMode);
graphicsDevice.setFullScreenWindow(null);
quitGame();
System.exit(0);
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -