📄 java游戏编程初步.htm
字号:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<!-- saved from url=(0053)http://www.javaeasy.com/ArticleShow.asp?ArticleID=772 -->
<HTML><HEAD><TITLE>Java游戏编程初步</TITLE>
<META http-equiv=Content-Type content="text/html; charset=gb2312"><LINK
href="Java游戏编程初步.files/default.css" type=text/css rel=stylesheet>
<META
content="java;java程序员;编程;程序员; java文档; java编程; java应用; java数据库; java源码; java开发; swing; JDK; java技术; J2EE; JSP; JavaScript; EJB; XML; 数据库; 软件开发; java网络技术; 陈光明; java资料; "
name=KEYWORDS>
<META content="MSHTML 6.00.2800.1458" name=GENERATOR></HEAD>
<BODY bgColor=#660033 leftMargin=0 topMargin=0 marginwidth="0"
marginheight="0"><LINK href="Java游戏编程初步.files/default.css" type=text/css
rel=stylesheet>
<TABLE cellSpacing=0 cellPadding=0 width="100%" border=0>
<TBODY>
<TR vAlign=top>
<TD vAlign=top width="100%" height=86>
<TABLE cellSpacing=0 cellPadding=0 width="99%" align=center
bgColor=#ffffff border=0>
<TBODY>
<TR>
<TD vAlign=top width="38%"><IMG height=86
src="Java游戏编程初步.files/ci.jpeg" width=279 border=0></TD>
<TD vAlign=center width="62%">
<DIV align=center>
<OBJECT
codeBase=http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,29,0
height=60 width=480
classid=clsid:D27CDB6E-AE6D-11cf-96B8-444553540000><PARAM NAME="movie" VALUE="images/bannerswf.swf"><PARAM NAME="quality" VALUE="high">
<embed
src="images/bannerswf.swf" width="480" height="60" quality="high"
pluginspage="http://www.macromedia.com/go/getflashplayer"
type="application/x-shockwave-flash"></embed></OBJECT></DIV></TD></TR></TBODY></TABLE></TD></TR></TBODY></TABLE>
<TABLE cellSpacing=0 cellPadding=0 width="99%" align=center border=0>
<TBODY>
<TR>
<TD vAlign=top align=middle colSpan=5 height=301>
<TABLE cellSpacing=0 cellPadding=0 width="100%" align=center
bgColor=#ffffff border=0>
<TBODY>
<TR>
<TD> </TD>
<TD class=class-name width="100%" height=30><A
href="http://www.javaeasy.com/index.asp">首页</A>>><A
href="http://www.javaeasy.com/artclelist.asp">文档中心</A>>> <A
href="http://www.javaeasy.com/artclelist2.asp?BigClassName=图形、图像与多媒体">图形、图像与多媒体 </A>>> <A
href="http://www.javaeasy.com/artclelist2.asp?BigClassName=图形、图像与多媒体&SmallClassName=游戏开发">游戏开发 </A>>>
</TD>
<TD></TD></TR>
<TR>
<TD width=5></TD>
<TD vAlign=top>
<TABLE cellSpacing=0 cellPadding=0 width="100%" bgColor=#ffffff
border=0>
<TBODY>
<TR>
<TD bgColor=#cccccc height=1><IMG height=1
src="Java游戏编程初步.files/blank.gif" width=1></TD></TR>
<TR>
<TD bgColor=#f6f6f6 height=89>
<P align=center><FONT face="黑体,Arial, Helvetica, sans-serif"
color=#000000
size=4><STRONG><BR>Java游戏编程初步</STRONG></FONT><FONT color=gray
size=1>阅读次数753</FONT> </P>
<P
align=right>作者:天翼.李 出处:yesky
</P></TD></TR></TBODY></TABLE>
<P>现在流行的游戏似乎都是用C或C++来开发的。在java平台上几乎没有很大型及可玩的流行游戏。由于java是个新生语言,他的许多特性还有待大家的发掘,但是我们不能否认Java在游戏编程方面的强大性。本文将带领大家一步一步学习编写Java游戏。最终打造属于自己的Java游戏。
<P> 在开始之前我们得确认你已经安装了Java
JDK,并已经安装了浏览器软件如IE。本章是以Internet为开发对象,一步一步教大家认识Java的Thread、Applets….以及游戏编程要注意的一些方方面面并在每一小部分附上了相应的源代码以供大家参考,最后我们还会对我们的游戏程序进行指导性的提示。在文章中我们还穿插了很多建设性的问题,让读者参与到我们的开发中来。但是由于本章指在带领大家进入这个门槛,大部分知识并不会很详细说明,有兴趣的读者可查阅相关的资料补充。在开始之前我们还得确认你已经知道类,继承和java语言的一些基本属性了。</P>
<P> <B>基本applet</B></P>
<P> Applets是一种Web浏览器上的小程序,由于applet对系统而言绝对安全,所以它做的事比aaplication有限,但是对于客户端的程序,applets仍然是个很强大的工具。为了浏览和运行方便,我们就以applet为开发对象。</P>
<P> 开发Applets程序,我们得继承Applet类,并覆写必要的函数,下面几个函数控制了Web页面上的applet生成与执行。</P>
<TABLE cellSpacing=0 cellPadding=0 width="90%" border=1>
<TBODY>
<TR>
<TD width="11%">函数</TD>
<TD width="89%">作用</TD></TR>
<TR>
<TD width="11%">Init()</TD>
<TD
width="89%">这个函数会被自动调用,执行applet的初始化动作—包括组件在版面上的分配,你一定得覆写它</TD></TR>
<TR>
<TD width="11%">Start()</TD>
<TD
width="89%">每当浏览器显示applet内容时,都会调用它,让applet开启其正规工作(尤其是那些被stop()关闭的工作),调用init()之后也会调用这个函数</TD></TR>
<TR>
<TD width="11%">Stop()</TD>
<TD
width="89%">每当浏览器不显示内容时,都会调用它。让applet关闭某些耗资源的工作,调用destory()之后也会调用这个函数</TD></TR>
<TR>
<TD width="11%">Destroy()</TD>
<TD
width="89%">浏览器将applet自网页移除之际,便会调用它,以执行”applet不再被使用”应该做的最后释放资源等动作</TD></TR>
<TR>
<TD width="11%">Paint()</TD>
<TD
width="89%">让你在Applet界面上进行相应的绘画动作,每次刷新时都会重画</TD></TR></TBODY></TABLE>
<P> 所有的applet文件源文件名和java应用程序一样都是.java为扩展名,编译后的执行文件扩展名为.class,由于在applet中已经没有了main()函数,它是和html自动集成,所以我们要执行applet,要在html源文件中放入一特定的标签(tag),才能告诉网页如何装载并执行这个applet,这里有一点要注意,我们执行的网页必须能执行java程序。</P>
<P> 普通Html 源码格式</P>
<TABLE cellPadding=0 width="100%" bgColor=#ffffff border=0>
<TBODY>
<TR>
<TD>
<P><HTML></P>
<P><APPLET CODE="HelloWorld.class" WIDTH=300 HEIGHT=500></P>
<P></APPLET></P>
<P></HTML</P></TD></TR></TBODY></TABLE>
<P><BR> <applet code ="HelloWorld.class" width=300
height=500>这行即applet的执行处。</P>
<P> applet 执行文档为 ="HelloWorld.class" 告诉网页”applet
”扩展文件为HelloWorld.class</P>
<P> width 和 height 告诉浏览器这个显示的applet的大小 </P>
<P> 有关标签(tag)的说明,大家可在网上找到很多相关的说明文档。</P>
<P></P>
<P> <B>线程</B></P>
<P> 由于apllet,java应用程序的执行都和线程有关。我们来大概了解一下线程的概念。</P>
<P> 线程也称为轻型进程
(LWP)。每个线程只能在单个进程的作用域内活动、协作和数据交换,并且在计算资源方面非常廉价。线程需要操作系统的支持,因此不是所有的机器都提供线程。Java
编程语言,作为相当新的一种语言,已将线程支持与语言本身合为一体,这样就对线程提供了强健的支持。</P>
<P> Thread 类是一个具体的类,即不是抽象类,该类封装了线程的行为。要创建一个线程,程序员必须创建一个从 Thread
类导出的新类。程序员必须覆盖 Thread 的 run() 函数来完成有用的工作。用户并不直接调用此函数;而是必须调用 Thread 的
start() 函数,该函数再调用 run()。</P>
<P> 但是使用Thread类实现线程,增加了程序的类层次,所以一般程序员都由另一个java线程接口Runnable接口来实现,Runnable接口只有一个函数run(),此函数必须由实现了此接口的类实现。</P>
<P> 线程中有几个重要的方法是我们得了解:</P>
<P> Thread.start(): 启动一个线程</P>
<P> Thread.stop(): 停止一个线程</P>
<P> Thread.sleep(time in milliseconds): 暂停线程在一个等待时间内。</P>
<P><STRONG>动画技术 </STRONG></P>
<P> <B>自由降落动画</B></P>
<P> 了解了一些基本概念后,下面我们就开始我们的实质性的工作。我们设计一个球从屏幕顶上降落到屏幕下面,程序实现比较简单,但是这是游戏动画中不可少的一部分。在开始之前我们来看看我们的applet开始语句。</P>
<P>
<TABLE cellPadding=0 width="100%" bgColor=#ffffff border=0>
<TBODY>
<TR>
<TD>
<P>import java.awt.*;<BR>import java.applet.*; </P>
<P>public class Ball </P>
<P>extends Applet implements Runnable </P>
<P>{ </P>
<P>public void init() { }</P>
<P>public void start() { }</P>
<P>public void stop() { }</P>
<P>public void destroy() { }</P>
<P>public void run () { }</P>
<P>public void paint (Graphics g) { } </P>
<P>} </P></TD></TR></TBODY></TABLE></P>
<P> 在开始函数中我们要新建程序的主线程,并启动这个线程。一旦做好这些准备工作以后,当applet第一次被显示时,就会创建线程对象的一个实例,并把this对象作为建构方法的参数,之后就可以启动动画了</P>
<P>
<TABLE cellPadding=0 width="100%" bgColor=#ffffff border=0>
<TBODY>
<TR>
<TD>
<P>public void start ()<BR>{</P>
<P>// 定义一个新的线程<BR>Thread th = new Thread (this);<BR>//
启动线程<BR>th.start ();</P>
<P>} </P></TD></TR></TBODY></TABLE></P>
<P> 现在我们来看看线程的run方法,它在循环while(),中每隔20毫秒重画动画场景。sleep这个方法很重要,如果在run循环中没有这部分,圆的重画动作将执行得很快,其他方法将得不到有效执行,也即我们在屏幕上将看不到球的显示。</P>
<P>
<TABLE cellPadding=0 width="100%" bgColor=#ffffff border=0>
<TBODY>
<TR>
<TD>
<P>public void run ()<BR>{</P>
<P>//<BR>while (true)<BR>{</P>
<P>// 重画applet画面<BR>repaint();</P>
<P>try<BR>{</P>
<P>// 暂停线程20毫秒<BR>Thread.sleep (20);</P>
<P>}<BR>catch (InterruptedException ex)<BR>{</P>
<P>}</P>
<P>}</P>
<P>}<BR></P></TD></TR></TBODY></TABLE></P>
<P> 我们接着读下去之前,有几个问题需要回答。你也许会问,浏览器调用Java小程序的start和stop方法吗? run
方法是如何被调用的? 情况是这样的,当浏览器启动了一个内部线程时,就相应地启动了applet
的运行。当网页显示时,就启动了applet的start
方法。Start方法创建一个线程对象,并把applet自身传送给线程,以实现run方法。</P>
<P> 此时,两个线程在运行:由浏览器启动的初始线程,以及处理动画的线程。快速查看applet的start方法,可以知道它创建了线程,并启动了它。类似地,当网页被隐藏后,applet的stop方法就调用了线程的stop方法。</P>
<P> 注意:在Applets和Threads中的 start/stop子程序</P>
<P> 在Applet 和Thread 两个类中都有start和stop方法,但它们的功能不同。一旦Applet
显示时,就调用applet的start方法,一旦applet 隐藏时,就调用applet的stop
方法。相反,线程的start方法将调用run方法,线程的stop方法将停止正在执行的线程。</P>
<P>public void paint(Graphics g); </P>
<P> paint() 方法所传入的参数—— java.awt.Graphics
对象将是一个经裁剪的相关显示区的图像代表(而不会是整个显示区)。我们对圆球图形元素的绘制就是在通过重写
paint()方法,在其中对传入的Graphics 对象g进行操作完成的。 </P>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -