电子文档交易市场
安卓APP | ios版本
电子文档交易市场
安卓APP | ios版本

Java游戏编程初步

16页
  • 卖家[上传人]:夏**
  • 文档编号:464333634
  • 上传时间:2023-11-18
  • 文档格式:DOC
  • 文档大小:45.01KB
  • / 16 举报 版权申诉 马上下载
  • 文本预览
  • 下载提示
  • 常见问题
    • 1、Java游戏编程初步现在流行的游戏似乎都是用C或C+来开发的。在java平台上几乎没有很大型及可玩的流行游戏。由于java是个新生语言,他的许多特性还有待大家的发掘,但是我们不能否认Java在游戏编程方面的强大性。本文将带领大家一步一步学习编写Java游戏。最终打造属于自己的Java游戏。 一、在开始之前我们得确认你已经安装了JavaJDK,并已经安装了浏览器软件如IE。本章是以Internet为开发对象,一步一步教大家认识Java的Thread、Applets.以及游戏编程要注意的一些方方面面。并在每一小部分附上了相应的源代码以供大家参考,最后我们还会对我们的游戏程序进行指导性的提示。在文章中我们还穿插了很多建设性的问题,让读者参与到我们的开发中来。但是由于本章指在带领大家进入这个门槛,大部分知识并不会很详细说明,有兴趣的读者可查阅相关的资料补充。在开始之前我们还得确认你已经知道类,继承和java语言的一些基本属性了。基本appletApplets是一种Web浏览器上的小程序,由于applet对系统而言绝对安全,所以它做的事比aaplication有限,但是对于客户端的程序,appl

      2、ets仍然是个很强大的工具。为了浏览和运行方便,我们就以applet为开发对象。开发Applets程序,我们得继承Applet类,并覆写必要的函数,下面几个函数控制了Web页面上的applet生成与执行。函数作用Init()这个函数会被自动调用,执行applet的初始化动作包括组件在版面上的分配,你一定得覆写它Start()每当浏览器显示applet内容时,都会调用它,让applet开启其正规工作(尤其是那些被stop()关闭的工作),调用init()之后也会调用这个函数Stop()每当浏览器不显示内容时,都会调用它。让applet关闭某些耗资源的工作,调用destory()之后也会调用这个函数Destroy()浏览器将applet自网页移除之际,便会调用它,以执行”applet不再被使用”应该做的最后释放资源等动作Paint()让你在Applet界面上进行相应的绘画动作,每次刷新时都会重画所有的applet文件源文件名和java应用程序一样都是.java为扩展名,编译后的执行文件扩展名为.class,由于在applet中已经没有了main()函数,它是和html自动集成,所以我们要执

      3、行applet,要在html源文件中放入一特定的标签(tag),才能告诉网页如何装载并执行这个applet,这里有一点要注意,我们执行的网页必须能执行java程序。普通Html源码格式HTMLAPPLETCODE=HelloWorld.classWIDTH=300HEIGHT=500/APPLET/HTMLappletcode=HelloWorld.classwidth=300height=500这行即applet的执行处。applet执行文档为=HelloWorld.class告诉网页”applet”扩展文件为HelloWorld.classwidth和height告诉浏览器这个显示的applet的大小有关标签(tag)的说明,大家可在网上找到很多相关的说明文档。线程由于apllet,java应用程序的执行都和线程有关。我们来大概了解一下线程的概念。线程也称为轻型进程(LWP)。每个线程只能在单个进程的作用域内活动、协作和数据交换,并且在计算资源方面非常廉价。线程需要操作系统的支持,因此不是所有的机器都提供线程。Java编程语言,作为相当新的一种语言,已将线程支持与语言本身合为一体,

      4、这样就对线程提供了强健的支持。Thread类是一个具体的类,即不是抽象类,该类封装了线程的行为。要创建一个线程,程序员必须创建一个从Thread类导出的新类。程序员必须覆盖Thread的run()函数来完成有用的工作。用户并不直接调用此函数;而是必须调用Thread的start()函数,该函数再调用run()。但是使用Thread类实现线程,增加了程序的类层次,所以一般程序员都由另一个java线程接口Runnable接口来实现,Runnable接口只有一个函数run(),此函数必须由实现了此接口的类实现。线程中有几个重要的方法是我们得了解:Thread.start():启动一个线程Thread.stop():停止一个线程Thread.sleep(timeinmilliseconds):暂停线程在一个等待时间内。二、动画技术 自由降落动画了解了一些基本概念后,下面我们就开始我们的实质性的工作。我们设计一个球从屏幕顶上降落到屏幕下面,程序实现比较简单,但是这是游戏动画中不可少的一部分。在开始之前我们来看看我们的applet开始语句。importjava.awt.*;importjava.a

      5、pplet.*;publicclassBallextendsAppletimplementsRunnablepublicvoidinit()publicvoidstart()publicvoidstop()publicvoiddestroy()publicvoidrun()publicvoidpaint(Graphicsg)在开始函数中我们要新建程序的主线程,并启动这个线程。一旦做好这些准备工作以后,当applet第一次被显示时,就会创建线程对象的一个实例,并把this对象作为建构方法的参数,之后就可以启动动画了publicvoidstart()/定义一个新的线程Threadth=newThread(this);/启动线程th.start();现在我们来看看线程的run方法,它在循环while(),中每隔20毫秒重画动画场景。sleep这个方法很重要,如果在run循环中没有这部分,圆的重画动作将执行得很快,其他方法将得不到有效执行,也即我们在屏幕上将看不到球的显示。publicvoidrun()/while(true)/重画applet画面repaint();try/暂停线程20毫秒T

      6、hread.sleep(20);catch(InterruptedExceptionex)我们接着读下去之前,有几个问题需要回答。你也许会问,浏览器调用Java小程序的start和stop方法吗?run方法是如何被调用的?情况是这样的,当浏览器启动了一个内部线程时,就相应地启动了applet的运行。当网页显示时,就启动了applet的start方法。Start方法创建一个线程对象,并把applet自身传送给线程,以实现run方法。此时,两个线程在运行:由浏览器启动的初始线程,以及处理动画的线程。快速查看applet的start方法,可以知道它创建了线程,并启动了它。类似地,当网页被隐藏后,applet的stop方法就调用了线程的stop方法。注意:在Applets和Threads中的start/stop子程序在Applet和Thread两个类中都有start和stop方法,但它们的功能不同。一旦Applet显示时,就调用applet的start方法,一旦applet隐藏时,就调用applet的stop方法。相反,线程的start方法将调用run方法,线程的stop方法将停止正在执行的线

      7、程。publicvoidpaint(Graphicsg)paint()方法所传入的参数java.awt.Graphics对象将是一个经裁剪的相关显示区的图像代表(而不会是整个显示区)。我们对圆球图形元素的绘制就是在通过重写paint()方法,在其中对传入的Graphics对象g进行操作完成的。当我们应用程序的逻辑要对系统界面进行更新时,调用repaint()方法来通知AWT线程进行刷新操作。repaint()方法实际会让AWT线程去调用另外一个方法,update。update方法在默认情况下会做两件事,一是清除当前区域内容,二是调用其paint()方法完成实际绘制工作。paint、repaint、update三个方法关系如图所示:此主题相关图片如下:但是如何让我们的圆运动呢?这里我们利用函数Graphics类的fillOval函数来设置了圆的起始位置x,y。现在我们只要在线程run方法中每单位时间增大y的值,线程将在每一个单位时间内重画圆的位置。每单位时间y值越大,下降的速度就会越快。在屏幕上我们就将看到这个圆球做自由降落运动。如下代码所示:while(true)/设置动画移动速度y+

      8、=1;publicvoidpaint(Graphicsg)/设置球的颜色g.setColor(Color.blue);/从x,y位置处画一个实心的圆g.fillOval(x,y,2*r,2*r);在这之前我们需要在开始处设置一些变量,定义好x,y的默认位置值。r在此处是我们画的圆的半径大小。intx=100;inty=20;intr=10;我们的自由降落的动画就完了。是不是很简单,如果还有地方不明白,大家可在此处下载完整的代码及应用程序。看看真实的演示效果和代码。下面每一部分我们也将在最后附上相应的源代码及应用程序下载。如果大家有兴趣,可改变y的值,及x的值,你会得到不同的下降效果。三、双缓冲,消除闪烁 大家可能注意到了上面例子中的我们下降的圆看起来不是很清晰,带着很严重的闪烁。这种现象在写游戏程序中是普遍存在的现象。这是由于我们的repaint()函数导致的结果,由于它在调用paint()函数前会自动清除屏幕,所以在一个毫秒内我们会看到一个空白的屏幕,在快速的变换操作中就出现了闪烁现象。解决这种闪烁现象有几种方法,下面是两种方法的列举说明,其他的方式大家可以自己尝试。第一种:我们始终不清除屏幕显示,但是这个方法会带来个附作用,我们下降的圆不在是一个圆了,而是一条直线,因为它的下降过程中没有了断点,保留了所有的圆球的影象。我们只要在Ball.java内加上如下代码update(Graphicsg)paint(g),你就会看到一条很长的线拉出来。有兴趣的朋友可以试试。第二种:使用双缓冲机制(Doublebuffering)现在大部分的游戏都是采用双缓冲机制来解决屏幕的闪烁现象,我们就以此为例来进行说明,有关缓冲区及相关缓冲机制的概念,大家可参考附录的缓冲说明。而我们的程序中简单的说就是在显示我们想要的图画之前,把所有的图画先在后台绘制好并存放到相应的图像变量中去。当需要显示时直接复制到前台屏幕就可以了。具体实现:1.首先我们用createImage方法新建一后台图像类变量2.然后使用getGraphics()方法得到当前图像的图形关联3.在后台处理所有相关的处理,如清除屏幕,后台绘画等等当完成所有的后台工作后,复制已经绘制好的图像到前台,并覆盖前台的存在图像。这样我们的所有操作都是在后台前行,在

      《Java游戏编程初步》由会员夏**分享,可在线阅读,更多相关《Java游戏编程初步》请在金锄头文库上搜索。

      点击阅读更多内容
    最新标签
    监控施工 信息化课堂中的合作学习结业作业七年级语文 发车时刻表 长途客运 入党志愿书填写模板精品 庆祝建党101周年多体裁诗歌朗诵素材汇编10篇唯一微庆祝 智能家居系统本科论文 心得感悟 雁楠中学 20230513224122 2022 公安主题党日 部编版四年级第三单元综合性学习课件 机关事务中心2022年全面依法治区工作总结及来年工作安排 入党积极分子自我推荐 世界水日ppt 关于构建更高水平的全民健身公共服务体系的意见 空气单元分析 哈里德课件 2022年乡村振兴驻村工作计划 空气教材分析 五年级下册科学教材分析 退役军人事务局季度工作总结 集装箱房合同 2021年财务报表 2022年继续教育公需课 2022年公需课 2022年日历每月一张 名词性从句在写作中的应用 局域网技术与局域网组建 施工网格 薪资体系 运维实施方案 硫酸安全技术 柔韧训练 既有居住建筑节能改造技术规程 建筑工地疫情防控 大型工程技术风险 磷酸二氢钾 2022年小学三年级语文下册教学总结例文 少儿美术-小花 2022年环保倡议书模板六篇 2022年监理辞职报告精选 2022年畅想未来记叙文精品 企业信息化建设与管理课程实验指导书范本 草房子读后感-第1篇 小数乘整数教学PPT课件人教版五年级数学上册 2022年教师个人工作计划范本-工作计划 国学小名士经典诵读电视大赛观后感诵读经典传承美德 医疗质量管理制度 2
    关于金锄头网 - 版权申诉 - 免责声明 - 诚邀英才 - 联系我们
    手机版 | 川公网安备 51140202000112号 | 经营许可证(蜀ICP备13022795号)
    ©2008-2016 by Sichuan Goldhoe Inc. All Rights Reserved.