`
luliangok
  • 浏览: 775942 次
文章分类
社区版块
存档分类
最新评论

Eclpse中Java游戏应用程序开发

 
阅读更多
EclpseJava游戏应用程序开发
飘飘白云 kesalin@hotmail.com
本文内容:Java游戏应用程序框架,全屏的切换,将Java工程打包,读取相对工程目录文件以及从打包的jar中读取文件的方法。
建立测试项目
1, eclipse中新建名为 PackTestjava项目,Source页中选择Allow output folders for source folders选项,允许工作输出文件到bin目录下(方便管理)。
2, eclipse工作目录下,找到PackTest/src目录,在其下建立以下两个目录:com/test,res/images
PackTest.java,MainFrame.java,Tools.java拷贝到test目录下;
将两个png图片分别命名为house.png, ballon.png放到images目录下,在eclipse中刷新项目。
3, 编译运行,应该可以看到屏幕上画出两副图片来。同时可以按
F键进入全屏模式,按ESC键退出全屏模式。
在非IDE环境下运行程序
1, 使用命令行
进入到eclipse的工作目录下的PackTest目录下,新建名为run.batbat文件,输入内容:java -cp bin; com.test.PackTest,保存,双击就可以运行。
注意:这里要求指定bin为工作输出目录。如果你的程序还涉及到网络访问,远程访问等要求更高安全级别的安全策略,则需要在PackTest目录下新建policy文件(没有后缀!),输入内容:
grant {
permission java.security.AllPermission;
};
同时修改run.bat文件:
java -cp bin; -Djava.security.policy=policy com.test.PackTest
2, 打包运行
(1)将eclipse的工作目录下的PackTest/bin目录下的所以文件以及目录拷贝到一个新的文件夹中比如c:/pack,pack目录下新建manifest.mf文件,输入内容为:
Manifest-Version: 1.0
Main-Class: com.test.PackTest
Created-By: 1.4.2_07 (Sun Microsystems Inc.)
注意:1),冒号后面必须要有一个空格,每行结束要用enter键换行;
2),Main-Class项指定应用程序的入口,应该是有Main()函数的类名。
(2)进入dos,移动到c:/pack目录下输入命令:
Jar cvmf manifest.mf packtest.jar *.*

生成所需的packtest.jar文件,双击就可以运行。如果默认打开方式不是javaw.exe那么可以指定打开方式为javaw.exe,也可以写一个bat文件,如run.bat,输入:java -jar packtest.jar ,并放置到与packtest.jar同一目录下。

//*******************************Tools.java**************************************

/**
* Copy Right Information: 转载或引用请保留此信息--飘飘白云
* Project: PackTest
* JDK version used: jdk1.4.2
* Version: 1.0.0
* Created By: kesalin@hotmail.com
* Created date: 2006-6-1 15:47:08
* Discription:
* Modification history
*
**/

package com.test;

import java.awt.Color;
import java.awt.Component;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.MediaTracker;
import java.awt.Toolkit;
import java.awt.image.BufferedImage;
import java.net.URL;
import java.net.URLClassLoader;

import javax.imageio.ImageIO;

public class Tools
{

/**
* 创建缓冲图片
*
* @param w
* @param h
* @return
*/
public static Image createBufferedImage(int w, int h) {
//创建
BufferedImage bi = new BufferedImage(w, h, BufferedImage.TYPE_INT_RGB);

//清屏
Graphics g = bi.getGraphics();
g.setColor(Color.BLACK);
g.fillRect(0, 0, w, h);
g.dispose();

return bi;
}

/**
* @param comp
* @param fileName 图像的相对路径文件名字
* @return image
*/
public static Image getImage(Component comp,String fileName)
{
URLClassLoader urlLoader = (URLClassLoader)comp.getClass().getClassLoader();
URL url = urlLoader.findResource(fileName);

Image image = Toolkit.getDefaultToolkit().getImage(url);
MediaTracker mediatracker = new MediaTracker(comp);

try {
mediatracker.addImage(image, 0);
mediatracker.waitForID(0);
} catch (InterruptedException _ex) {
System.out.println("#Error#Tools->getImage():" + fileName +" failed."+_ex);
image = null;
}
if (mediatracker.isErrorID(0)) {
image = null;
}

return image;
}

/**
* @param comp
* @param fileName 图像的相对路径文件名字
* @return
*/
public static BufferedImage getBufferedImage(Component comp, String fileName)
{
BufferedImage bi = null;
try {
URLClassLoader urlLoader = (URLClassLoader) comp.getClass().getClassLoader();
bi = ImageIO.read(urlLoader.getResourceAsStream(fileName));
} catch (Exception e) {
e.printStackTrace();
}
return bi;
}
}

//*********************PackTest.java***********************************

package com.test;

public class PackTest
{
public static void main(String[] args) {
MainFrame packTest = new MainFrame("Java游戏应用程序框架及各种运行方法");
packTest.show();
}
}

//********************MainFrame.java

package com.test;

import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.GraphicsDevice;
import java.awt.GraphicsEnvironment;
import java.awt.Image;
import java.awt.RenderingHints;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.awt.image.BufferedImage;

import javax.swing.JDesktopPane;
import javax.swing.JFrame;


public class MainFrame extends JFrame implements Runnable
{

// 系统相关
public Graphics2D g2d;
public Image bufferImage;// 双缓冲
private JDesktopPane desktop;

GraphicsEnvironment ge = null;
GraphicsDevice gd = null;
private boolean isFullScreen = false;// 全屏标志
private boolean isAppExit = false;// 应用程序结束标志
private int sleepTime = 10;


// 显示相关的属性
private int displayModeWidth;// 屏幕水平分辨率
private int displayModeHeight;
private int gameWidth = 1024;//游戏屏幕宽度
private int gameHeight = 768;


// 主线程
private Thread mainThread;

// 时间处理
private long curT;


// FPS control
public int fps;
public long fpsT;
public int fpsC = 0;
public static final int FPS_SEQU = 1; // FPS_SEQU 秒更新一下fps
public static final int FPS_EXP = 7;
public static final int FPS_EXP_FLOAT = 2;
public static final int SLEEPTIME_ADJUST = 2;
public static final int SLEEPTIME_MIN = 5;
public static final int SLEEPTIME_MAX = 30;

// 资源变量
Image ballon = null;
BufferedImage house = null;


/**
* 构造函数
* @param title
*/
public MainFrame(String title) {
super(title);
setDefaultCloseOperation(EXIT_ON_CLOSE);// 关闭应用程序

// 初始化JFrame
initJFrame();

processKeyEvent();

// 启动应用程序
start();
}

/**
* 初始化JFrame
*/
public void initJFrame() {

// 取得GraphicsDevice,在某些集成显卡上可能不能工作
ge = GraphicsEnvironment.getLocalGraphicsEnvironment();
gd = ge.getDefaultScreenDevice();

// 取得显示分辨率的大小
displayModeWidth = gd.getDisplayMode().getWidth();
displayModeHeight = gd.getDisplayMode().getHeight();

// 设置应用程序窗口大小
setSize(gameWidth, gameHeight);

// 创建双缓冲
bufferImage = Tools.createBufferedImage( gameWidth, gameHeight);
g2d = (Graphics2D)bufferImage.getGraphics();
g2d.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING,
RenderingHints.VALUE_TEXT_ANTIALIAS_ON);

desktop = new JDesktopPane();
getContentPane().add(desktop);

}

/**
* 处理切换全屏按键事件
*/
private void processKeyEvent()
{
// 如果支持全屏
if( gd.isFullScreenSupported() )
{
addKeyListener( new KeyListener() {
public void keyTyped(KeyEvent e) {
}

public void keyPressed(KeyEvent e) {
// 按escape键退出全屏
if( e.getKeyCode() == KeyEvent.VK_ESCAPE ) {
if( isFullScreen ) {
isFullScreen = false;
changeScreenSize();
}
}
// 按F键进入全屏
else if( e.getKeyCode() == KeyEvent.VK_F ) {
if( !isFullScreen ) {
isFullScreen = true;
changeScreenSize();
}
}
}

public void keyReleased(KeyEvent e) {
}
}) ;
}
}

public void paint(Graphics g ) {
if( isFullScreen )
g.drawImage(bufferImage,0,0,displayModeWidth,displayModeHeight,this);
else
g.drawImage(bufferImage,0,0,gameWidth,gameHeight,this);
}

/**
* 切换全屏,并重画
*/
public void changeScreenSize() {
if( isFullScreen ) {
dispose();
setUndecorated(true);// 隐藏JFrame上的Title bar
gd.setFullScreenWindow(this);
show();
}
else {
dispose();
gd.setFullScreenWindow(null);
setUndecorated(false);
this.setResizable(false);
show();
}
}

/**
* 更新刷新频率
*/
private void updateFPS() {
// FPS control
if( (fpsT + FPS_SEQU * 1000) > curT ){
fpsC ++;
}
else {
fps = fpsC / FPS_SEQU;
fpsT = curT;
fpsC = 0;

// 调整FPS
if( fps < FPS_EXP - FPS_EXP_FLOAT ){
if( sleepTime > SLEEPTIME_MIN )
sleepTime -= SLEEPTIME_ADJUST;
}
else if( fps > FPS_EXP + FPS_EXP_FLOAT ){
if( sleepTime < SLEEPTIME_MAX )
sleepTime += SLEEPTIME_ADJUST;
}
}
}

/**
* 启动主线程
*/
public void start() {
// 启动主线程
mainThread = new Thread(this);
mainThread.start();
}

public void run()
{
gameInit();

for(;!isAppExit;)
{
curT = System.currentTimeMillis();
updateFPS();
gameMain();

gameDraw();
repaint();

try {
Thread.sleep(sleepTime);
} catch (InterruptedException e) {
System.out.println("#Error#MainFrame->gcWait():" + e);
}
}

if( isAppExit ) {
this.dispose();
}
}

/**
* 初始化应用程序
*/
public void gameInit() {

}

/**
* 游戏主逻辑处理
*/
public void gameMain() {
if( ballon == null ) {
ballon = Tools.getImage(this,"res/images/ballon.png");
}

if( house == null ) {
house = Tools.getBufferedImage(this,"res/images/house.png");
}
}

/**
* 游戏描绘处理
*/
public void gameDraw() {
g2d.drawImage(ballon,0,0,this);
g2d.drawImage(house,0,ballon.getHeight(null),this);
}
}

<全文完>

分享到:
评论

相关推荐

    用Eclipse开发java_web应用程序

    用Eclipse开发java_web应用程序

    eclipse 开发桌面程序

    利用SWT技术,基于WindowBuilder Eclipse 插件开发 桌面应用小程序详细步骤

    Java程序设计基础:使用Eclipse创建和运行Java程序.pptx

    开发Java应用程序常见的IDE工具有: Eclipse NetBeans等 安装完JDK之后,可以使用集成开发环境开发应用程序 Eclipse开发环境 Eclipse 是一个开放源代码的、基于 Java 的可扩展开发平台。Eclipse 附带了一个标准的...

    Eclipse打包Java应用程序及在Linux系统上的部署运行[归纳].pdf

    Eclipse打包Java应用程序及在Linux系统上的部署运行[归纳].pdf

    用 Eclipse 开发 Android 应用程序

    本教程介绍如何在 Eclipse 环境中进行 Android 应用程序开发,包括两个示例应用程序。第一个示例是一个基本的应用程序,涉及构建和调试的所有阶段。第二个应用程序示例涉及比较复杂的 Android 特性,包括联系人搜索...

    java_eclipse开发照相机的应用程序

    用eclipse开发的一个可以从电脑USB接口照相机进行拍照(java应用程序)

    Java程序开发大全

    《Java程序开发大全:基于MyEclipse平台+Struts+Hibernate+Spring主流框架开发》系统全面地介绍了Java中的各项主流技术,以及基于这些技术的商业化应用程序的开发技巧,在讲解过程中以目前最为流行的开发工具My ...

    myeclipse开发\Eclipse+IDE开发Java+Web应用程序

    myeclipse开发\Eclipse+IDE开发Java+Web应用程序

    利用Eclipse 开发Hibernate 应用程序

    介绍如何用Eclipse 开发Hibernate 应用程序,简单易懂,图文解说。 利用Eclipse 开发Hibernate 应用程序.rar

    使用Eclipse IDE开发Java Web应用程序

    本文通过图文并茂的方式详细讲解了在Eclipse开发环境下,如何使用Struts/Spring/Hibernate多种主流框架搭建一个Java Web项目的开发环境和配置方式,在这个过程中也让读者完成了一个案例的开发。同时,文中也讲解了...

    Java应用安装包(eclipse+JDK_API+Java反编译)

    JDK(Java Development Kit)称为Java开发包或Java开发工具,是一个编写Java的Applet小程序和应用程序的程序开发环境。JDK是整个Java的核心,包括了Java运行环境(Java Runtime Envirnment),一些Java工具和Java的...

    Eclipse应用程序

    虽然大多数用户很乐于将 Eclipse 当作 Java 集成开发环境(IDE)来使用,但 Eclipse 的目标却不仅限于此。Eclipse 还包括插件开发环境(Plug-in Development Environment,PDE),这个组件主要针对希望扩展 Eclipse ...

    Java程序开发大全源代码.part2

    《Java程序开发大全:基于MyEclipse平台+Struts+Hibernate+Spring主流框架开发》系统全面地介绍了Java中的各项主流技术,以及基于这些技术的商业化应用程序的开发技巧,在讲解过程中以目前最为流行的开发工具My ...

    Eclipse 核心编程--插件、界面与Web开发

    书中不仅包括适合Java初学者阅读的编译和运行Java应用程序,在Eclipse中配置环境变量、构建路径,使用Junit编写测试代码等Eclipse开发的基础知识;还包括适合Eclipse具体项目开发人员阅读的开发Java图形应用程序,...

    开发您的第一个 Eclipse RCP 应用程序

    Eclipse Rich Client Platform (RCP) 的目标是在各种不是集成开发环境 (IDE) 的最终用户应用程序中使用 Eclipse。随着 Eclipse V3.1 的发布,创建 RCP 应用程序变得容易。本教程将指导您一步步创建自己的 RCP 应用...

    Java程序开发大全源代码.part5

    《Java程序开发大全:基于MyEclipse平台+Struts+Hibernate+Spring主流框架开发》系统全面地介绍了Java中的各项主流技术,以及基于这些技术的商业化应用程序的开发技巧,在讲解过程中以目前最为流行的开发工具My ...

    《Java Web开发与实战--Eclipse+Tomcat+Servlet+JSP整合应用》.(刘伟,张利国).[PDF].zip

    全面讲解了java web编程所需的核心技术,并涵盖一些高级技术主题。主要内容包括web应用程序运行原理、...另外,书中提供了大量的实例代码,读者可以自由取用,这些代码功能强大,适合解决java web开发中的实际问题。

    Eclipse开发android应用

    Eclipse开发android应用

    基于Eclipse的Hadoop应用开发环境的配置

    基于Eclipse的Hadoop应用开发环境的配置,叫你一步步的配置一个属于自己的Hadoop环境。

Global site tag (gtag.js) - Google Analytics