您的位置:首页 >> 编程开发 >> Java >> JDK核心API >> 正文
JDK核心API RSS
 

使用GameAPI函数制作二维动作游戏(一)

http://www.rdxx.com 02年03月29日 11:18 互联网 我要投稿

关键词: 动作 , API函数 , 游戏 , API , 函数
 

使用 Game API函数制作二维动作游戏

 

翻译者:阿麦  hua

原作者:

 

MIDP 2.0里面包括一个用来简化编写二维游戏的API函数。这个API函数是非常简凑的,只包括 javax.microedition.lcdui.game包里的五个类。这五个类主要提供了两个重要的功能:

l         新的 GameCanvas类使得在一个游戏循环体内画一个screen和响应键盘输入成为可能,而不需要调用系统的paint和input线程。

l         功能强大而复杂的图层( layer)API函数可以轻松高效地建立复杂的场景。          

        

  muTank Example

利用 GameCanvas类创建一个游戏循环(game loop)

GameCanvas类是附加了功能的Canvas类,它提供了立即重画和检查设备按键状态的方法。这些新的方法把一个游戏的所有函数(功能)封装在一个循环体内,并由一个单线程进行控制。为什么这样做就非常吸引人阿?先让我们考虑一下你是如何执行一个使用了Canvas类的典型游戏的:


		
			 
		public
	 
		void
	 MicroTankCanvas
		

	
		    extends Canvas
		

	
		    implements Runnable {
		

	
		  public 
		void
	 
	run
	() {
		

	
		    while (
	true
	) {
		

	
		      
		// Update the game state.
	
		

	
		      
	repaint
	();
		

	
		      
		// Delay one time step.
	
		

	
		    }
		

	
		  }
		

	
		  
		

	
		  public 
		void
	 
	paint
	(Graphics g) {
		

	
		    
		// Painting code goes here.
	
		

	
		  }
		

	
		    protected 
		void
	 
	keyPressed
	(
		int
	 keyCode) {
		

	
		    
		// Respond to key presses here.
	
		

	
		  }
		


		}
	
		

 

这不是一个美丽的画面。运行在应用程序线程中的run()方法,每一个时间段都会刷新游戏。典型的任务是刷新小球或飞行物的位置,绘制人物或飞行器动画。每一次通过循环体,repaint()方法被用来刷新屏幕。系统把按键事件传送给KeyPressed(),它能适当地刷新游戏状态。

问题是,每样东西都在不同的线程里,游戏代码在以上三种不同方法里传递很容易混淆。当run()方法里的主动画循环体调用repaint()方法时,将没有办法确切知道系统什么时候调用paint()方法。当系统调用KeyPressed()时,也没有办法知道程序的另一部分正在进行什么。如果你 KeyPressed() 中的代码将要刷新游戏的状态,而同一时刻paint()方法将表现屏幕,这时屏幕将会持续非常奇怪的状态。如果表现屏幕所用时间超过一个单时间段,动画会看起来颠簸不定或是很奇怪。

GameCanvas类 允许你避开常用绘画 (painting) 和按键消息 (key-event) 机制 所以所有的游戏逻辑都可以被包括在一个单循环中。首先,GameCanvas类允许你用getGraphics()方法直接访问Graphics对象。对于所返回的Graphics对象的任何表现(rendering)都可以通过屏幕外缓冲区(offscreen buffer)来实现。你可以用flushGraphics()复制缓冲区到屏幕上,直到屏幕被刷新才会返回。这种方式给你提供比调用repaint()方法更完善的控制。Repaint()方法会立即返回值,以至于你的应用程序不能确定系统什么时候会调用paint()来刷新屏幕。

上一页 下一页


 
 
标签: 动作 , API函数 , 游戏 , API , 函数 打印本文
 
 
  相关资讯
RSS
 
 
 
  热点搜索
 
 
 



Valid XHTML 1.0 Transitional
Copyright ©2005 - 2008 Rdxx.Com,All Rights Reserved
收藏本页
收藏本站