⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 java游戏编程初步2.htm

📁 编写游戏的初步知识
💻 HTM
📖 第 1 页 / 共 2 页
字号:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<!-- saved from url=(0067)http://www.javaeasy.com/ArticleShow.asp?ArticleID=772&ArticlePage=2 -->
<HTML><HEAD><TITLE>Java游戏编程初步</TITLE>
<META http-equiv=Content-Type content="text/html; charset=gb2312"><LINK 
href="Java游戏编程初步2.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游戏编程初步2.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游戏编程初步2.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>&nbsp;</TD>
          <TD class=class-name width="100%" height=30><A 
            href="http://www.javaeasy.com/index.asp">首页</A>&gt;&gt;<A 
            href="http://www.javaeasy.com/artclelist.asp">文档中心</A>&gt;&gt;&nbsp;<A 
            href="http://www.javaeasy.com/artclelist2.asp?BigClassName=图形、图像与多媒体">图形、图像与多媒体&nbsp;</A>&gt;&gt;&nbsp;<A 
            href="http://www.javaeasy.com/artclelist2.asp?BigClassName=图形、图像与多媒体&amp;SmallClassName=游戏开发">游戏开发&nbsp;</A>&gt;&gt;&nbsp; 
          </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游戏编程初步2.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>阅读次数755</FONT> </P>
                  <P 
                  align=right>作者:天翼.李&nbsp;&nbsp;&nbsp;&nbsp;出处:yesky&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
                  </P></TD></TR></TBODY></TABLE>
            <P>
            <P>  此处g 为屏幕图形,bg为g的后台关联。而bgimage包含了bg图形。请于此处来看看我们的源代码例子及演示效果。</P>
            <P></P>
            <P>  <B>改变运动方向</B></P>
            <P>  我们已经解决了动画的两个很重要的问题,移动动画和闪烁消除。但是我们很快会发现一个问题,球从屏幕顶上落下来后,就不见了。这可不是我们所需要的。我们要的是一个生动的画面。如何让我们的球不穿过屏幕而始终在屏幕上活动呢?在开始之前,我建议大家自己想办法解决,如果你能自己处理好了。你的水平将会有一个很大的提高。如果没有想出好办法,没关系,下面我们将很详细的说明球的方向改变的技术。</P>
            <P>  不知道大家注意了没有,在上面我们说到球的移动时,我们是通过增加y的值,让线程重画新的圆位置和图形。如果改变y的值的大小球的下降速度也会改变。不错,这就是我们的解决方法 
            ,我们只要用一个变量来存储这个速度的大小而不用固定的值。在线程执行也即run方法处我们用代码改变速度的方向,球的方向也会改变。即设置这个变量”speed”为”-1”。当然在设置值前我们要进行判断,你是想让球穿过屏幕从别一边开始显示,还是来回反弹呢!如果想来回反弹,我们只要不让球的半径值超过applet屏幕显示区域就可以了。此处我们用r/2来表示球的半径。</P>
            <P>
            <TABLE cellPadding=0 width="100%" bgColor=#ffffff border=0>
              <TBODY>
              <TR>
                <TD>
                  <P>//反弹下落球<BR>if (y > appletsize_y – r/2)<BR>{</P>
                  <P>// 改变方向<BR>x_speed = -1;</P>
                  <P>}<BR>// 反弹上升球<BR>else if ( < r/2)<BR>{</P>
                  <P>// 改变方向<BR>x_speed = +1;</P>
                  <P>}</P></TD></TR></TBODY></TABLE></P>
            <P>  至于如何让球穿过从屏幕顶上重新下降,我们在此没有说明,也不会说明了。留给大家自己去想想,已经很简单了。在下面我们附上了两种方式的源代码和执行文件。如果大家运行程序,大家可能会发现,我们的球的大小和速度有一些改变。这里是为了更好的反应演示效果。</P>
            <P><FONT size=3><STRONG>多媒体</STRONG> </FONT></P>
            <P></P>
            <P>  <B>使用多媒体声音</B></P>
            <P>  多媒体功能在游戏中是必不少的一部分,优美的音乐,漂亮的界面往往是一个成功游戏必需具备的条件。</P>
            <P>  在开始之前我们先了解一下主要的小型声音文件类型:<BR><BR>  AU - 
            (扩展名为AU或SND)适用于短的声音文件,为Solaris和下一代机器的通用文件格式,也是JAVA平台的标准的音频格式。AU类型文件使用的三种典型音频格式为: 
            8位μ-law类型(通常采样频率为8kHz), 8位线性类型,以及16位线性类型。</P>
            <P><BR>  WAV - (扩展名为WAV)由 Microsoft和 IBM共同开发,对WAV的支持已经被加进Windows 
            95并且被延伸到Windows 98. WAV文件能存储各种格式包括μ-law,a-law和 PCM 
            (线性)数据。他们几乎能被所有支持声音的Windows应用程序播放。</P>
            <P>  AIFF - (扩展名为AIF或IEF)音频互换文件格式是为Macintosh计算机和Silicon Graphics 
            (SGI)计算机所共用的标准音频文件格式。AIFF和 AIFF-C几乎是相同的,除了后者支持例如μ-law和 IMA 
            ADPCM类型的压缩。</P>
            <P>  MIDI - 
(扩展名为MID)乐器数字接口MIDI是为音乐制造业所认可的标准,主要用于控制诸如合成器和声卡之类的设备。</P>
            <P>  在JDK1.0上,java只支持*.au格式的声音文件,但是java2的API以及声音包提供了很强大的对声音技术的支持。而此部分为了让大家快速掌握游戏编程的基本知识,我们仅使用了AudioClip接口类来实现播放"*.wav"。如果大家有兴趣可参考sun 
            java网站的声音sapmle,上面提供了完备的实例和教程说明。</P>
            <P>  使用AudioClip接口比较简单,我们只要实例对象,加载声音文件后,再在任何地方播放即可。恢复和播放声音最简单的方法是通过Applet类的play()方法。</P>
            <P>  AudioClip接口</P>
            <P>   1.播放 play<BR>   2.循环 loop<BR>   3.停止 
            stop<BR><BR>  启动和停止声音文件,或循环播放,你必须用 applet的 getAudioClip方法把它装载进入 
            AudioClip对象,getAudioClip方法要用一个或两个参数,当作播放的指示。第一个或唯一的一个参数是 
            URL参数,用来指示声音文件的位置,第二参数是文件夹路径指针。</P>
            <P>  下列代码行举例说明加载声音文件进入剪贴对象: 
            下面的"gun.wav"是指当前目录下的声音文件。我们也可用*.au格式的文件代替。</P>
            <P>
            <TABLE cellPadding=0 width="100%" bgColor=#ffffff border=0>
              <TBODY>
              <TR>
                <TD>AudioClip co = getAudioClip(getCodeBase(), "gun.wav"); 
              </TD></TR></TBODY></TABLE></P>
            <P>  getAudioClip()方法仅仅能被applet内调用。随着JAVA2的引入,应用程序也能用Applet类的newAudioClip方法装入声音文件。前一例子可以改写如下以用于Java应用程序:</P>
            <P>
            <TABLE cellPadding=0 width="100%" bgColor=#ffffff border=0>
              <TBODY>
              <TR>
                <TD>AudioClip co = 
            newAudioClip(“gun.wav”)</TD></TR></TBODY></TABLE></P>
            <P>  我们现在可在任何地方使用方法play()播放我们的声音了。play()一旦被调用立刻开始恢复和播放声音。但这有一点要注意:如果声音文件不能被查找,将不会有出错信息,仅仅是沉默。<BR>源代码及应用程序请于此处下载.</P>
            <P></P>
            <P> <B> 图片处理技术</B></P>
            <P>  图片的处理和声音的处理在一样简单。设置图片变量,得到图形,最后绘制图形。我们就直接从代码来分析。在此我们绘制一幅applet的背景图。开始绘制前,我们先要声明图形变量,用来存放图形文件。</P>
            <P>
            <TABLE cellPadding=0 width="100%" bgColor=#ffffff border=0>
              <TBODY>
              <TR>
                <TD>
                  <P>Image backImage; </P>
                  <P>// 加载图片文件<BR>backImgage = getImage (getCodeBase (), 
                  "black.gif");</P></TD></TR></TBODY></TABLE></P>
            <P>  下面在我们的paint()方法中利用函数drawImage绘制我们图形。</P>
            <P>
            <TABLE cellPadding=0 width="100%" bgColor=#ffffff border=0>
              <TBODY>
              <TR>
                <TD>g.drawImage (backImage, 0, 0, 
            this);</TD></TR></TBODY></TABLE></P>
            <P>  DrawImage参数中的blackImage即我们得到的图形,而后面的0,0分别代表图形的x坐标和y坐标.this:为图形代表的类,这里指的即picture类。在这里建议大家使用*.gif格式的图片文件。因为如果是internet网上,文件的大小也决定了你的applet加载时的快慢,没有人很愿意等很长时间来玩你的游戏,即使你的游戏比较出色。源代码及演示程序下载.</P>
            <P>  大家在玩游戏时是不是见过人物图像行走?动物来回跑动的动画?这些都是基于图形技术来实现的。我们只要把上面的代码稍微修改,用数组变量来存储我们得到的图形文件组,再利用drawImage()方法播放出来就可实现动画图片的播放.</P>
            <P>
            <TABLE cellPadding=0 width="100%" bgColor=#ffffff border=0>
              <TBODY>
              <TR>
                <TD>
                  <P>Image[] backImage; </P>
                  <P>// 加载图片文件</P>
                  <P>for (int i=4,i<backImage.length,i++)</P>
                  <P>{<BR>backImgage[i] = getImage (getCodeBase (), 
                  "t1"+i+".gif");</P>
                  <P>}<BR></P></TD></TR></TBODY></TABLE></P>
            <P>  大家可参考JDK包中的Animation例子,它就是一个很好的播放一组图片文件的例子。</P>
            <P><FONT size=3><STRONG>事件处理</STRONG> </FONT></P>
            <P></P>
            <P>  <B>鼠标监听技术</B></P>
            <P>  玩游戏时,不管是小型的扑克牌和大型的RPG游戏,都要参与者溶入到游戏的角色当中。不错,交互,游戏有了交互的功能才可以说是一个完整的游戏。即使是编程游戏如机器人足球,Robocode都要程序员参与编写代码,观察比赛。有两种主流方法可实现游戏的交互:鼠标和键盘。当然还包括手操杆等,但现在大部分Pc机上使用的还是鼠标和键盘。我们就以这两项为基础来说明游戏中事件的响应过程。</P>
            <P>  要判断相应的鼠标所进行的动作:是点击,还是移动。我们必须对我们鼠标进行监听。要监听鼠标事件就必须调用这些接口之一,或扩展一个鼠标适配器(mouse 
            adapters) 类. AWT 提供了两种监听接口(listener interface): 
            java.awt.event.MouseListener 和 
            java.awt.event.MouseMotionListener.</P>
            <P>  现在我设计一个鼠标事件,当点击applet屏幕时,下降的球向反方向运动。以实现了对游戏的简单控制。</P>
            <P>  MouseListener一共有5个方法,主要用来实现鼠标的点击事件。这里要注意一点:由于MouseListener是接口我们要在实现的类中重载它的所有方法. 
            </P>
            <P>  <B>Mouse点击事件</B></P>
            <P>   · mousePressed() 当用户按下鼠标按钮时发生.</P>
            <P>   · mouseReleased() 当用户松开鼠标按钮时发生.</P>
            <P>   · mouseClicked() 当用户按下并松开鼠标按钮时发生. 用户在选择或双击图标的时候通常会点击鼠标按钮. 
            用户如果在松开鼠标之前移动鼠标,点击不会导致鼠标相应事件出现.</P>
            <P>   · 因为点击鼠标是按下鼠标和松开鼠标的结合, 在事件分配给 mouseClicked() 方法之前, 
            mousePressed() 和 mouseReleased() 方法已同时被调用.</P>
            <P>  鼠标状态处理:</P>
            <P>   mouseEntered() 当鼠标离开当前组件并进入你所监听的组件时激活事件.</P>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -