- 浏览: 21409 次
- 性别:
- 来自: 信阳
-
最新评论
-
Mybeautiful:
协议无处不在,当我跟你说“你收到我邮件后,立刻回一封。”这就是 ...
协议论 -
jcs130:
哈哈~顶~~
2011年 暑假集训(7.22~8.22)
一、项目主类:
1.Ball(子弹);2.BallListener(监听线程——暂废弃);
3.Config(相关配置);4.DrawPanel(战场类);
5.GameListener(游戏监听)
6.Plane(飞机);7.ThreadControl(程序总控制);
8.WAR_Earth(主界面)
二、结构组成
本项目主要有两大线程组成,一个是子弹线程,另一个则是飞机线程,其中每个线程又分为敌我两个线程,每一种线程对象 对应不同的属性数据。 由于线程任务分配的不规律性,所以 项目在运行时,采用边运行,边监听的的模式,以达到准确的 对每个线程进行操作。
三、项目流程
1.相关配置,其中的配置主要有两种,一种是用来存放线程对象的队列,另一种就是上面提到的战场类的对象,这是考虑到整个流程操作,战场面板贯穿整个流程,所以把它归为配置中。
2.完成主界面,界面主要包括两部分,一是菜单条——主要是对游戏一些的说明,二是战场面板——这是作战的整个范围,另外就是负责对我方飞机属性的一些描述,整个界面采用边界布局。
3.战场类的的处理:由于无论是子弹线程,还是飞机线程,他们在运行时,各自的对象都是一直在不停地运动,所以需要不停地 刷新界面,最终都要经过paint函数,所以在子弹线程和飞机线程中并不负责绘制各自对象,他们只是负责处理数据,整个的绘制都是通过借用队列里的数据在paint函数里完成。
4.监听器,主要负责通过键盘获得触发时间信息,完成对游戏的操作,包括开始、暂停、继续、结束,我方飞机的移动和发子弹。另外在监听器中还包含两个计时器,一个是负责敌方飞机的定时产生,另一个则是负责对界面的定时刷新。
5.飞机线程和子弹线程:发射子弹是飞机的一个属性,所以在飞机线程里包含一个定时发子弹的计时器,以负责子弹的发出。飞机的属性包括生命值、被打爆后的经验值以及速度方向,子弹的属性主要包括伤害值和速度方向。另外每个线程都有控制自己单个线程结束与否的属性。
6.整个线程的总开关,主要实现对整个进程的开始,暂停,继续,结束,以及对数据的清空处理等操作.
四、主要问题:
1.Panel 对象 Warpanel 的大小设置,和画布获取?
分析:在整个项目的开始进行时,对对象的绘制是在各自的线程内部完成的,但由于静态对象在所有对象创建之前被加载,
在游戏监听器的构造器里获得通过Warpanel获得的画笔是空的,但有一点暂时任然不明白,就是我在类DrawPanel的构造器已经通过 setPreferredSize(new Dimension(width, height)); 给对象设定了大小,但从其他类里用getWidth()得到 的却是0,令人费解,后来我又在上面的语句后加上 setSize(new Dimension(width, height));这样问题就解决了,但我不知是什么原因,不知道是不是我把Warpanel放在接口里作为静态对象处理的结果。希望某位大侠帮忙解决一下
2.监听线程达不到一枪一个的效果,直接导致无法计分?
分析:由于线程任务分配的不规律性,所以即使子弹打中对方,但并没有立刻进行数据处理,而是等到分配到了再处理,所以果 断舍弃监听线程,采用边监听,边运行的模式,具体就是在每个线程内部每运行一次就判断一次,然后立刻处理
3.屏幕狂闪?
分析:由于每一个线程对象移动一次 ,就要对整个屏幕进行重绘,加上每次重绘时数据也比较多,而且是整个屏幕重绘,所以程序需要
不断地改变窗体中正在被绘制的图象,造成绘制的缓慢,加剧了闪烁,概括一下就是屏幕的更新方法有问题,所以必须采用双缓冲(原理见附录);
4.飞机的定时产生,会有重叠?
分析:这也算是第二个问题的延续了,由于在飞机产生时位置是随机产生的,所以并不能确保会不会有重叠,解决方法就是 加一句判断语句,但这个问题我可是找了好久,特别是两个敌方飞机完全重叠,完全以假乱真了
五、附录
1. 双缓冲技术的工作原理:先在内存中分配一个和我们动画窗口一样大的空间(在内存中的空间我们是看不到的),然后利用getGraphics()方法去获得双缓冲画笔,
接着利用双缓冲画笔给空间我们想画的东西,最后将它全部一次性的显示到我门的屏幕上.这样在我门的动画窗口上面是显示出来就非常的流畅了.避免了上面的闪烁效果。
2. 双缓冲的使用
它的执行过程是这样的:repaint() 到update()再到paint(),而我们的双缓冲代码就写在update()里。
1)定义一个Graphics对象gOff和一个Image对象offScreenImage。按屏幕大小建立一个缓冲对象给offScreenImage。然后取得offScreenImage的Graphics赋给gOff。此处可以把gOff理解为逻辑上的缓冲屏幕,而把offScreenImage理解为缓冲屏幕上的图象。
2) 在gOff(逻辑上的屏幕)上用paint(Graphics g)函数绘制图象。
3)将后台图象offScreenImage全部一次性的绘制到我们的动画窗口,然后把我们内存中分配的空间窗口关闭调用dispose()方法.
具体代码如下:
Image offScreenImage = null; if (offScreenImage == null) offScreenImage = createImage(BLOCK_SIZE * COLS, BLOCK_SIZE * ROWS); Graphics gOff = offScreenImage.getGraphics(); // 4.调用paint(),将缓冲图象的画笔传入 paint(gOff); // 5.再将此缓冲图像一次性绘到代表屏幕的Graphics对象,即该方法传入的“g”上 g.drawImage(offScreenImage, 0, 0, null);
3、重载update(Graphics g)实现双缓冲:
这是比较传统的做法。也是实际开发中比较常用的做法。
private Image iBuffer; private Graphics gBuffer; //重载paint(Graphics scr)函数: public void paint(Graphics scr) { scr.setColor(Color.RED); scr.fillOval(90,ypos,80,80); } //重载update(Graphics scr)函数: public void update(Graphics scr) { if(iBuffer==null) { iBuffer=createImage(this.getSize().width,this.getSize().height); gBuffer=iBuffer.getGraphics(); } gBuffer.setColor(getBackground()); gBuffer.fillRect(0,0,this.getSize().width,this.getSize().height); paint(gBuffer); scr.drawImage(iBuffer,0,0,this); }
发表评论
-
略谈Hash
2011-11-25 03:07 1233... -
协议论
2011-09-29 01:49 1040一、引文 “协议”, ... -
哈弗曼树以及压缩运用
2011-08-14 16:56 1641一.介绍 其实在还没有学习压缩之前,在学校学习中已 ... -
树与二叉树
2011-08-12 22:34 817一、介绍 对于java中“树”这个概念,顾名思义就像是现实中 ... -
链表 小结
2011-08-09 21:29 724... -
多线程 小结
2011-08-01 22:28 861一. 介绍 每个java程序都至少有一 ... -
String 小结
2011-08-01 22:27 829一.String 类是一个比较相当重要的类,像网络上很多数据 ... -
BMP
2011-07-30 23:49 862一、 介绍 开始之前先讲一 ... -
异常机制 小结
2011-07-26 17:07 714异常机制是指当程序出现错误后,程序如何处理。具体来说,异常机制 ... -
文件操作小结
2011-07-26 16:46 742系统中的文件可分为三种:目录文件、真实文件、缓存文件。j ... -
KeyWords Summary
2011-07-25 00:21 819... -
集合框架 小结
2011-07-24 23:30 686Java 中集合类定义主要 ... -
事件和监听器的使用
2011-07-23 22:58 7691 .事件其实无处不在,每个人不管是在干什么,都是事件,在类里 ... -
类与对象
2011-06-09 23:42 409 类是对象的抽象化,也就相当于与一种类型eg:int,dou ... -
登陆界面开发
2011-06-09 23:41 7121. Eclipse的简单操作 Alt+’/’ 方法提示符 ... -
方法的重载与重写,自动转型与强制转型,多态的理解
2011-06-09 01:51 10161.方法的重载与重写? 两者都是对于函数的操作,区别在于重载是 ... -
类,抽象类,接口的特点,区别
2011-06-09 01:49 722类,抽象类,接口的特点,区别 /////////////// ...
相关推荐
内容概要:本文主要探讨了SNS单模无芯光纤的仿真分析及其在通信和传感领域的应用潜力。首先介绍了模间干涉仿真的重要性,利用Rsoft beamprop模块模拟不同模式光在光纤中的传播情况,进而分析光纤的传输性能和模式特性。接着讨论了光纤传输特性的仿真,包括损耗、色散和模式耦合等参数的评估。随后,文章分析了光纤的结构特性,如折射率分布、包层和纤芯直径对性能的影响,并探讨了镀膜技术对光纤性能的提升作用。最后,进行了变形仿真分析,研究外部因素导致的光纤变形对其性能的影响。通过这些分析,为优化光纤设计提供了理论依据。 适合人群:从事光纤通信、光学工程及相关领域的研究人员和技术人员。 使用场景及目标:适用于需要深入了解SNS单模无芯光纤特性和优化设计的研究项目,旨在提高光纤性能并拓展其应用场景。 其他说明:本文不仅提供了详细的仿真方法和技术细节,还对未来的发展方向进行了展望,强调了SNS单模无芯光纤在未来通信和传感领域的重要地位。
发那科USM通讯程序socket-set
嵌入式八股文面试题库资料知识宝典-WIFI.zip
源码与image
内容概要:本文详细探讨了物流行业中路径规划与车辆路径优化(VRP)的问题,特别是针对冷链物流、带时间窗的车辆路径优化(VRPTW)、考虑充电桩的车辆路径优化(EVRP)以及多配送中心情况下的路径优化。文中不仅介绍了遗传算法、蚁群算法、粒子群算法等多种优化算法的理论背景,还提供了完整的MATLAB代码及注释,帮助读者理解这些算法的具体实现。此外,文章还讨论了如何通过MATLAB处理大量数据和复杂计算,以得出最优的路径方案。 适合人群:从事物流行业的研究人员和技术人员,尤其是对路径优化感兴趣的开发者和工程师。 使用场景及目标:适用于需要优化车辆路径的企业和个人,旨在提高配送效率、降低成本、确保按时交付货物。通过学习本文提供的算法和代码,读者可以在实际工作中应用这些优化方法,提升物流系统的性能。 其他说明:为了更好地理解和应用这些算法,建议读者参考相关文献和教程进行深入学习。同时,实际应用中还需根据具体情况进行参数调整和优化。
嵌入式八股文面试题库资料知识宝典-C and C++ normal interview_8.doc.zip
内容概要:本文介绍了基于灰狼优化算法(GWO)的城市路径规划优化问题(TSP),并通过Matlab实现了该算法。文章详细解释了GWO算法的工作原理,包括寻找猎物、围捕猎物和攻击猎物三个阶段,并提供了具体的代码示例。通过不断迭代优化路径,最终得到最优的城市路径规划方案。与传统TSP求解方法相比,GWO算法具有更好的全局搜索能力和较快的收敛速度,适用于复杂的城市环境。尽管如此,算法在面对大量城市节点时仍面临运算时间和参数设置的挑战。 适合人群:对路径规划、优化算法感兴趣的科研人员、学生以及从事交通规划的专业人士。 使用场景及目标:①研究和开发高效的路径规划算法;②优化城市交通系统,提升出行效率;③探索人工智能在交通领域的应用。 其他说明:文中提到的代码可以作为学习和研究的基础,但实际应用中需要根据具体情况调整算法参数和优化策略。
嵌入式八股文面试题库资料知识宝典-Intel3.zip
嵌入式八股文面试题库资料知识宝典-2019京东C++.zip
嵌入式八股文面试题库资料知识宝典-北京光桥科技有限公司面试题.zip
内容概要:本文详细探讨了十字形声子晶体的能带结构和传输特性。首先介绍了声子晶体作为新型周期性结构在物理学和工程学中的重要地位,特别是十字形声子晶体的独特结构特点。接着从散射体的形状、大小、排列周期等方面分析了其对能带结构的影响,并通过理论计算和仿真获得了能带图。随后讨论了十字形声子晶体的传输特性,即它对声波的调控能力,包括传播速度、模式和能量分布的变化。最后通过大量实验和仿真验证了理论分析的正确性,并得出结论指出散射体的材料、形状和排列方式对其性能有重大影响。 适合人群:从事物理学、材料科学、声学等相关领域的研究人员和技术人员。 使用场景及目标:适用于希望深入了解声子晶体尤其是十字形声子晶体能带与传输特性的科研工作者,旨在为相关领域的创新和发展提供理论支持和技术指导。 其他说明:文中还对未来的研究方向进行了展望,强调了声子晶体在未来多个领域的潜在应用价值。
嵌入式系统开发_USB主机控制器_Arduino兼容开源硬件_基于Mega32U4和MAX3421E芯片的USB设备扩展开发板_支持多种USB外设接入与控制的通用型嵌入式开发平台_
e2b8a-main.zip
少儿编程scratch项目源代码文件案例素材-火柴人跑酷(2).zip
内容概要:本文详细介绍了HarmonyOS分布式远程启动子系统,该系统作为HarmonyOS的重要组成部分,旨在打破设备间的界限,实现跨设备无缝启动、智能设备选择和数据同步与连续性等功能。通过分布式软总线和分布式数据管理技术,它能够快速、稳定地实现设备间的通信和数据同步,为用户提供便捷的操作体验。文章还探讨了该系统在智能家居、智能办公和教育等领域的应用场景,展示了其在提升效率和用户体验方面的巨大潜力。最后,文章展望了该系统的未来发展,强调其在技术优化和应用场景拓展上的无限可能性。 适合人群:对HarmonyOS及其分布式技术感兴趣的用户、开发者和行业从业者。 使用场景及目标:①理解HarmonyOS分布式远程启动子系统的工作原理和技术细节;②探索该系统在智能家居、智能办公和教育等领域的具体应用场景;③了解该系统为开发者提供的开发优势和实践要点。 其他说明:本文不仅介绍了HarmonyOS分布式远程启动子系统的核心技术和应用场景,还展望了其未来的发展方向。通过阅读本文,用户可以全面了解该系统如何通过技术创新提升设备间的协同能力和用户体验,为智能生活带来新的变革。
嵌入式八股文面试题库资料知识宝典-C and C++ normal interview_1.zip
少儿编程scratch项目源代码文件案例素材-激光反弹.zip
内容概要:本文详细介绍了COMSOL相控阵检测技术在有机玻璃斜楔上放置16阵元进行工件内部缺陷检测的方法。首先阐述了相控阵检测技术的基本原理,特别是通过控制各阵元的激发时间和相位来实现声波的聚焦和扫描。接着,重点解析了横孔缺陷的反射接收波,解释了波的折射现象及其背后的物理原因。最后,通过实例展示了COMSOL模拟声波传播过程的成功应用,验证了该技术的有效性和准确性。 适合人群:从事固体力学、无损检测领域的研究人员和技术人员,尤其是对相控阵检测技术和COMSOL仿真感兴趣的读者。 使用场景及目标:适用于需要精确检测工件内部缺陷的研究和工业应用场景,旨在提高检测精度和效率,确保产品质量和安全。 其他说明:文中提到的声速匹配现象有助于理解波在不同介质间的传播特性,这对优化检测参数设置有重要意义。
少儿编程scratch项目源代码文件案例素材-极速奔跑者.zip
嵌入式八股文面试题库资料知识宝典-微软_interview.zip