资源预览内容
第1页 / 共25页
第2页 / 共25页
第3页 / 共25页
第4页 / 共25页
第5页 / 共25页
第6页 / 共25页
第7页 / 共25页
第8页 / 共25页
第9页 / 共25页
第10页 / 共25页
亲,该文档总共25页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
1.1 利用Java实现地球系动画完整实现实例(第4部分)1.1.1 产生地球和月亮、并且月亮围着地球转1、如何实现?(1)什么是软件需求“产生地球和月亮、并且月凫围着地球转。”(2)什么是软件设计(思考)设计的结果其实就是产生出“解决方案”。(3)什么是软件开发实现(编程)程序员按照设计人员的设计文档进行编程实现。(4)什么是软件测试一一找出程序中的“各种缺陷(Bug)”(5)部署和维护一、第一步:创建两个地球线程1、EarthPlanetAppletimport;import;import;import;import;import;import;publicclassEarthPlanetAppletextendsJAppletimplementsRunnableprivateThreadearthMultiThread=null;privateThreadmoonMultiThread=null;privateGraphicsguiGraphics;privateImagealllmagesArrayf;privateintcurrentImageIndex=O;privateintimageWidth=0;privateintimageHeight=0;privatebooleanalllmagesLoaded=false;privatefinalintNUMBERMAGES=18;privatebooleanisRunedByApplication=false;publicstaticvoidmain(Stringargs)EarthPlanetFrameapplicationJFrame=nulI;applicationJFrame=newEarthPlanetFrame(利用Java实现的地球系动画)EarthPlanetAppletthreadApp!et=null;threadApplet=newEarthPlanetApplet();applicationJFrame.getContentPane().add(MCentern,threadApplet);threadApplet.isRunedByApplication=true;threadApplet.init();threadApplet.start。;applicationJFrame.setVisible(true);publicEarthPlanetApplet()publicvoidstart()if(earthMultiThread=null)earthMultiThread=newThread(this);earthMultiThread.start();)if(moonMultiThread=null)仓ij建出第2个线程对象moonMultiThread=newThread(this);moonMultiThread.startO;publicvoidstop()if(earthMultiThread!=null)earthMultiThread.stopO;earthMultiThread=null;)if(moonMultiThread!=mill)销毁线程对象moonMultiThread.stopO;moonMultiThread=null;)IpublicvoidloadAlIEarthImage()guiGraphics=getGraphics();alllmagesArray=newImageNUMBERMAGES;MediaTrackertracker=newMediaTracker(this);Stringstrimage;for(intcurrentlndex=1;currentlndex=NUMBERMAGES;currentIndex+)strimage=H/images/imgOOH+(currentindex10)?H0H:+currentindex+【gif;URLoneImageURL=getCIass().getResource(strImage);if(isRunedByApplication)allImagesArraycurrentIndeX-1=Toolkit.getDefaultToolkit().getIniage(oneImageURL);)elseallImagesArraycurrentIndex1=getlmage(onelmageURL);)tracker.addlmage(alllmagesArraycurrentindex-1.0);trytracker.waitForAH();catch(InterruptedExceptione)e.printStackTrace();1alllmagesLoaded=!tracker.isErrorAny();if(!alIIniagesLoaded)stop();guiGraphics.drawString(图像加载错误,可能是没有找到文件!,10,40);return;)imageWidth=allImagesArrayO.getWidth(this);imageHeight=allImagesArrayO.getHeight(this);publicvoidrun()if(!allImagesLoaded)loadAlIEarthlmageO;)repaint();while(true)trydisplaylmage(guiGraphics);currentlmagelndex+;if(currentimageindex=NUMBER_IMAGES)currentimageindex=0:Thread.sleep(50);catch(InterruptedExceptione)stop();)privatevoiddisp!ayImage(Graphicsg)分别显示两个地球图像if(!alIImagesLoaded)return;if(Thread.currentThread()=earthMultiThreacl)g.lrawImage(allImagesArraycurrentImageIndex5(getSize().width-imageVVidth)/2,(getSize().height-imageHeight)/2,null);else/改变坐标位置g.drawImage(allImagesArraycurrentImageIndex,(getSize(),width-ImageWidth)/4,(getSize().height-imageHeight)/4,null);)publicvoidpaint(Graphicsg)if(allImagesLoaded)Rectangler=g.getClipBounds();g.clearRect(r.x,r,y,r.width,r.height);displaylmage(g);)elseg.drawString(正在加载图像,请等待二10,20);)上面的代码主要是再创建出第2个线程,并显示出第2套图像。其中的getGipBounds方法得到代表画板边界的矩形,然后从这个矩形中提取宽度和高度数据,再清除该矩形区域。如果除掉下面的语句,将会出现什么现象?g.clearRect(r.x,r.y,r.width,r.height);2、Apple七程序方式执行(两个转动的图像)B利用了实现的地母系动画,/.,飞二、第二步:控制两个地球线程的旋转的速度1、需要补充的知识sleep(毫秒数)是Thread类的静态方法,它能够控制线程。如Thread.sleep(lOOO);该线程睡眠1秒钟,等1秒钟之后,继续余下代码执行。但在sleep时间间隔期满后,线程不一定立即恢复执行。这是因为在那个时刻,其它线程可能正在运行而且没有被调度为放弃执行,除非出现下面的情况:1)“醒来”的线程具有更高的优先级。2)正在运行的线程因为其它原因而阻塞。2、EarthPlanetApplet程序的代码import;import;import;import;import;import;import;publicclassEarthPlanetAppletextendsJAppletimplementsRunnableprivateThreadearthMultiThread=null;privateThreadnioonMultiThread=null;privateGraphicsguiGraphics;privateImageallImagesArray;privateintcurrentImageIndex=O;privateintimageWidth=0;privateintimageHeight=0;privatebooleanalllmagesLoaded=false;privatefinalintNUMBERMAGES=18;privatebooleanisRunedByApplication=false;publicstaticvoidmain(Stringargs)EarthPlanetFrameapplicationJFrame=null;applicationJFrame=newEarthPlanetFrame(利用Java实现的地球系动画)EarthPlanetAppletthreadApplet=null;threadApplet=newEarthPlanetApplet();applicationJFrame.getContentPane().add(HCenterH,threadApplet);threadApplet.isRunedByApplication=true;threadApplet.initQ;threadApplet.start();applicationJFrame.setVisible(true);)publicEarthPlanetApplet()publicvoidstart()if(earthMultiThread=null)earthMultiThread=newThread(this);earthMultiThread.start();1if(nioonMultiThread=null)moonMultiThread=newThread(this);nioonMultiThread.start();)publicvoidstop()if(earthMultiThread!=null)earthMultiThread.stop();earthMultiThread=null;)if(nioonMultiThread!=null)nioonMultiThread.stop();nioonMultiThread=null;)
收藏 下载该资源
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号