交流园地
义一个新类被称作派生,原始类被称作基类,这是因为它形成了派生类定义的基础。继承性可以使程序的
[4]
publicclassTankClientextendsFrame{publicstaticfinalintGAME_WIDTH=800;publicstaticfinalintGAME_HEIGHT=600;intx=50,y=50;ImageoffScreenImage=null;publicvoidpaint(Graphicsg){Colorc=g.getColor();g.setColor(Color.RED);g.fillOval(x,y,30,30);g.setColor(c);y+=5;}publicvoidupdate(Graphicsg){if(offScreenImage==null){offScreenImage}GraphicsgoffScreen=offScreenImage.getGraphics();Colorc=goffScreen.getColor();goffScreen.setColor(Color.GREEN);goffScreen.fillRectGAME_HEIGHT);goffScreen.setColor(c);paint(goffScreen);g.drawImage(offScreenImage,0,0,null);}publicvoidlaunch(){this.setLocation(400,300);this.setSize(GAME_WIDTH,GAME_HEIGHT);setTitle("TankWar");this.addWindowListener(newWindowAdapter(){publicvoidwindowClosing(WindowEventarg0){System.exit(0);}};this.setResizable(false);(0,0,GAME_WIDTH,=this.createImage(GAME_WIDTH,GAME_HEIGHT);
可重用性增加。(4)多态性。类的继承不仅是在定义新类的时候以原有类作为基础而实现类的重用,而且还利用一种被称作多态性的技术为应用程序设计增加巨大的灵活性。多态性指的是一个给定类型的单一变量可被用来引用不同类型对象,并且可自动地调用变量所引用的对象类型的特定方法。这使得对一个单一方法的调用
[2]
将根据应用这个调用的对象类型得到不同的操作行为。
3
Tank游戏实现的关键技术分析
Tank游戏面临的问题是如何将游戏中的对象显示
出来,如何让坦克能移动起来,这就要涉及到Java的显示原理及Java当中的事件处理机制。
3.1Java的图像显示原理以及实现过程
动画的本质就是运动的图形,一系列连续显示的静止图形会给人一种连续动画的假象。只要动画速度足够快,则分散的静止图形就会合并成一个连续运动的流程。绘制动画十分简单,只需遵照以下三步即可:①擦去整个小程序绘图区;②重画动画背景;③在新的位置绘制图形。但是,当动画连续帧之间运动和颜色不连续时就会发生闪烁现象。问题出在小程序区的屏幕刷新上,有以下两种方法可以防止动画闪烁:①第一种方法是只做局部刷新,即每次只擦除改变的部分。例如:如果要绘制一幅“高速的汽车”动画,每次刷新操作,先擦去前一位置的汽车,再在新的位置绘制一个。但是,如果动画比较复杂,运动部分重叠较多,则局部刷新操作很繁琐,也影响程序运行速度。②在上述情况下,可以用另外一种方法(双缓存)来解决闪烁问题。它的核心思想是在屏幕外完成一帧的全部动画,然后把最后绘制完的帧显示在小程序屏幕上,已在许多动画Applet中被使用。该方法的主要原理是创建一个后台图像,将需要绘制的一帧画入图像,然后调用DrawImage()将整个图像一次画到屏幕上去;其大部分绘制是离屏的,将离屏图像一次绘至屏幕上比直接在屏幕上绘制有效性高,大大提高了做图的性能。本游戏开发中使用双缓冲技术的代码如下:
importjava.awt.*;//以下代码在eclipse1.0下编译通
过
importjava.awt.event.*;
—135—
《农业网络信息》2010年第6期
交流园地
this.setBackground(Color.GREEN);this.addKeyListener(newKeyMonitor());setVisible(true);newThread(newPaintThread()).start();}publicstaticvoidmain(String[]args){TankClienttc=newTankClient();tc.launch();}privateclassPaintThreadimplementsRunnable{publicvoidrun(){while(true){repaint();try{Thread.sleep(100);}catch(InterruptedExceptione){e.printStackTrace();}}}}privateclassKeyMonitorextendsKeyAdapter{publicvoidkeyPressed(KeyEvente){System.out.println("ok");}}}
双缓存能够使动画平滑,但需要分配一张后台图像,如果图像较大,就需要很大一块内存,而当使用双缓存技术时,应重载update()。实际上在