java2d游戏编程入门pdf_《Java 2D游戏编程入门》—— 1.7 全屏显示模式中的主动渲染...

本节书摘来异步社区《Java 2D游戏编程入门》一书中的第1章,第1.7节,作者:【美】Timothy Wright(莱特),更多章节内容可以访问云栖社区“异步社区”公众号查看。

1.7 全屏显示模式中的主动渲染

位于javagames.render包中的FullScreenRenderingExample,包含了主动渲染框架和切换到全拼模式的显示模式代码;它创建了一个简单的全屏游戏框架。这个示例包含了前面各部分中展示的很多代码。此外还可以直接给JFrame设置背景颜色并且忽略重绘,以及设置setUndecorated()标志。由于在前面的示例中应用程序是从窗口模式切换到全屏模式的,因此没有设置该标志;但是当只使用全屏模式的时候,应该对JFrame进行该项设置。

保存当前的显示模式,切换到全屏模式,并且修改显示模式之后,应使用JFrame方法而不是窗口模式示例中的Canvas方法来创建缓冲策略。

即便还没有涉及键盘,但你还是需要知道退出程序的一些方法。因为JFrame是未装饰的,所以没有控件能够关闭窗口。当用户按下Escape键的时候,如下的代码将会关闭应用程序。

// FullScreenRenderingExample.java

addKeyListener( new KeyAdapter() {

public void keyPressed( KeyEvent e ) {

if( e.getKeyCode() == KeyEvent.VK_ESCAPE ) {

shutDown();

}

}

});```

在这个示例中,为了简单起见,显示模式直接编码为800×600、32位。在实际的产品级应用程序中,可用的显示模式应该像前面例子中那样进行枚举。如果你的系统不支持这种显示模式,请确保修改你的代码。

private DisplayMode getDisplayMode() {

return new DisplayMode(

800, 600, 32, DisplayMode.REFRESH_RATE_UNKNOWN );

}`

由于没有办法关闭该窗口,也就不需要有一个窗口监听器。当按下Escape键并且示例关闭时,在游戏循环关闭后,显示模式返回为常规模式。

package javagames.render;

import java.awt.*;

import java.awt.event.*;

import java.awt.image.*;

import javax.swing.*;

import javagames.util.*;

public class FullScreenRenderingExample

extends JFrame implements Runnable {

private FrameRate frameRate;

private BufferStrategy bs;

private volatile boolean running;

private Thread gameThread;

private GraphicsDevice graphicsDevice;

private DisplayMode currentDisplayMode;

public FullScreenRenderingExample() {

frameRate = new FrameRate();

}

protected void createAndShowGUI() {

setIgnoreRepaint( true );

setUndecorated( true );

setBackground( Color.BLACK );

GraphicsEnvironment ge =

GraphicsEnvironment.getLocalGraphicsEnvironment();

graphicsDevice = ge.getDefaultScreenDevice();

currentDisplayMode = graphicsDevice.getDisplayMode();

if( !graphicsDevice.isFullScreenSupported() ) {

System.err.println( "ERROR: Not Supported!!!" );

System.exit( 0 );

}

graphicsDevice.setFullScreenWindow( this );

graphicsDevice.setDisplayMode( getDisplayMode() );

createBufferStrategy( 2 );

bs = getBufferStrategy();

addKeyListener( new KeyAdapter() {

public void keyPressed( KeyEvent e ) {

if( e.getKeyCode() == KeyEvent.VK_ESCAPE ) {

shutDown();

}

}

});

gameThread = new Thread( this );

gameThread.start();

}

private DisplayMode getDisplayMode() {

return new DisplayMode(

800, 600, 32, DisplayMode.REFRESH_RATE_UNKNOWN );

}

public void run() {

running = true;

frameRate.initialize();

while( running ) {

gameLoop();

}

}

public void gameLoop() {

do {

do {

Graphics g = null;

try {

g = bs.getDrawGraphics();

g.clearRect( 0, 0, getWidth(), getHeight() );

render( g );

} finally {

if( g != null ) {

g.dispose();

}

}

} while( bs.contentsRestored() );

bs.show();

} while( bs.contentsLost() );

}

private void render( Graphics g ) {

frameRate.calculate();

g.setColor( Color.GREEN );

g.drawString( frameRate.getFrameRate(), 30, 30 );

g.drawString( "Press ESC to exit...", 30, 60 );

}

protected void shutDown() {

try {

running = false;

gameThread.join();

System.out.println( "Game loop stopped!!!" );

graphicsDevice.setDisplayMode( currentDisplayMode );

graphicsDevice.setFullScreenWindow( null );

System.out.println("Display Restored...");

} catch( InterruptedException e ) {

e.printStackTrace();

}

System.exit( 0 );

}

public static void main( String[] args ) {

final FullScreenRenderingExample app = new

FullScreenRenderingExample();

SwingUtilities.invokeLater( new Runnable() {

public void run() {

app.createAndShowGUI();

}

});

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
文名: Java2游戏编程 原名: Java 2 Game Programming 作者: Thomas Petchel译者: 晏利斌 孙淑敏 邵荣 资源格式: PDF 版本: 扫描版 出版社: 清华大学出版社书号: 7302112932发行时间: 2005年08月 地区: 大陆 语言: 简体文 简介: 内容介绍:   你经常看到有人在玩手机游戏吧,那些手机游戏基本上是用Java编写的。Java已经成熟了,它现在是一种开发能够多种平台上运行的小型游戏的很好方式。本书将向读者展示用Java语言和它的类库创建2D游戏,所涉及的主题包括高速性能、双缓冲图像、动画、声音、媒体控制、I/O和网络支持等。将带领大家一步一步学习编写Java游戏,最终打造属于自己的Java游戏。 目录: 第1篇 步入Java丛林:从Java2 API开始 第1章 Java2软件开发工具包 1.1 Java简史 1.2 为什么在游戏使用Java 1.3 为Java准备系统 1.3.1 安装Java SDK 1.3.2 编译和运行Java程序 1.3.3 使用命令行 1.3.4 使用集成开发环境(IDE) 1.3.5 关于Java2文档的说明 1.4 总结 第2章 预备:学习Java2 API 2.1 Game Over! 程序 2.1.1 import语句 2.1.2 给Java代码加注释 2.1.3 Java类声明 2.1.4 Java方法声明 2.1.5 Java的代码块 2.1.6 Java程序组成部分的关键点回顾 2.2 比特和字节:原始的Java类型 2.2.1 基本的整数类型 2.2.2 浮点类型 2.2.3 Char类型 2.2.4 布尔型 2.2.5 String类型 2.2.6 强制转换变量类型 2.2.7 Java数据类型、数组和标识符需要记忆的要点 2.3 Java的运算符 2.3.1 赋值运算符 2.3.2 比较运算符 2.3.3 算术运算符 2.3.4 自增和自减运算符 2.3.5 更多的整数运算符 2.3.6 使用点运算符 2.3.7 instanceof运算符 2.3.8 优先级顺序 2.3.9 关于运算符的记忆要点 2.4 条件语句 2.4.1 switch语句 2.4.2 Java的循环语句 2.4.3 用break、continue和return提前退出循环 2.5 处理运行时异常 2.5.1 使用try和catch块 2.5.2 使用throws子句 2.5.3 关于流程控制语句的记忆要点 2.6 总结 2.7 练习 第3章 带有类的语言:Java面向对象程序设计 3.1 设计一个Java类 3.2 方法的魔法 3.3 关于方法的更多话题 3.3.1 构造函数方法 3.3.2 访问方法 3.3.3 类方法 3.3.4 “其他”方法 3.4 继承 3.5 抽象类 3.6 类修饰符 3.7 接口 3.8 快捷地创建类 3.9 包 3.10 总结 3.11 练习 第4章 Java API为你服务:常用Java类 4.1 java.lang包 4.1.1 java.lang.Object 4.1.2 java.lang.String 4.1.3 java.lang.StringBuffer 4.1.4 封装类 4.1.5 java.lang.Math 4.1.6 java.lang.System 4.1.7 java.lang.Cloneable 4.1.8 java.lang.Thread 4.2 java.io包 4.3 java.util包 4.3.1 java.util.StringTokenizer 4.3.2 java.util.Random 4.3.3 Java2集合框架 4.4 总结 4.5 练习 第2篇 Java 2-D图像开发和抽象Window工具包 第5章 Applet基础 5.1 什么是Java applet 5.2 Applet和Application的比较 5.3 Applet的组成和生命周期 5.4 一个Applet例子 5.5 运行Java Applets 5.6 通用AWT组件 5.6.1 按钮 5.6.2 单选按钮(Radio Button) 5.6.3 作出重要选择 5.6.4 循环播放声音文件 5.6.5 文本域 5.6.6 标签 5.7 布局管理 5.7.1 FlowLayout类 5.7.2 GridLayout类 5.7.3 BorderLayout类 5.7.4 CardLayout类 5.8 容器(Container) 5.9 创建自定义组件 5.10 一个完整的例子 5.11 总结 5.12 练习 第6章 监听用户 6.1 EventLi

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值