項(xiàng)目第二天上午_第1頁(yè)
項(xiàng)目第二天上午_第2頁(yè)
項(xiàng)目第二天上午_第3頁(yè)
項(xiàng)目第二天上午_第4頁(yè)
項(xiàng)目第二天上午_第5頁(yè)
已閱讀5頁(yè),還剩15頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

設(shè)置速度.這里的原理與坦克移動(dòng)的原理類(lèi)似.即在子彈類(lèi)的draw()中,改變坐標(biāo)位置.2publicvoiddraw()intxgetX();intyStringpath="";switch(code){casey=Config.SPEED_BULLET;修改坐標(biāo)path="res\\img\\bullet_u.gif";caseDirection.MOVE_DOWN:y=Config.SPEED_BULLET;path=caseDirection.MOVE_LET:x=Config.SPEED_BULLET;path="res\\img\\bullet_l.gif";caseDirection.MOVE_Rxpath="res\\img\\bullet_r.gif";try{DrawUtils.draw(path,getX(),3}catch(OExceptione)}}了,造成這個(gè)現(xiàn)象的原因是,在自定義窗口類(lèi)的onKeyEvent(intkey)方法中,caseKeyboard.KEY_RETURN:bullet=了.因此,我們需要一個(gè)容器來(lái)存放每次按下回車(chē)鍵時(shí)生成的子彈對(duì)象.caseKeyboard.KEY_RETURN:bullet=tank.shot();然后在自定義窗口類(lèi) 方法中,遍歷容器并將元素繪制上去protectedvoid{for(Elementelement:{接下來(lái)我們需要對(duì)子彈發(fā)射的頻率做處理,即限制每秒鐘最多發(fā)射幾顆子彈.原理是將上次發(fā)射間隔,就發(fā)射子彈,并將當(dāng)前時(shí)間賦值給上次發(fā)射時(shí)間.privateprivatelonglastShotTime;//第二步,在坦克類(lèi) 方法中,判斷間隔時(shí)間,從而決定是否發(fā)射子publicBulletlongcurrentShotTime=returnlastShotTime=currentShotTime;//returnnewlastShotTimeConfig.TME_NTERVAL){//由于不發(fā)射時(shí)返 值,為了防止空指針異常,需要在自定義窗口onKeyEvent(int onKeyEvent(intcaseKeyboard.KEY_RETURN:bullet=tank.shot();大,這樣是不太合理的.因此我們需要對(duì)子彈進(jìn)行銷(xiāo)毀.子彈銷(xiāo)毀的時(shí)機(jī)是越界的一瞬間.因此,我們可以在子彈類(lèi)中定義一個(gè)銷(xiāo)毀的方 ,用于判斷子彈是否被銷(xiāo)毀publicisDestroy(){intx=super.getX();inty=DTH_SCREEN){return}elseif(xConfig.HEGHT_BULLET<0){returntrue;}elseif(y>Config.HEGHT_SCREEN){returntrue;}elseif(yConfig.HEGHT_BULLET<0){returntrue;return接下來(lái),在自定義窗口類(lèi)的 方法中,當(dāng)繪制完成后,遍歷集合,如果子彈應(yīng)該被銷(xiāo)毀,則將集合中的元素進(jìn)行移除.這里推薦一個(gè)不會(huì)發(fā)生并發(fā)修改異常的集 ,使用方式 protectedvoidonDisplayUpdate()for(Elementif(einstanceof Bulletbullet=(Bullet) 類(lèi)中定義渲染級(jí)別的常publicpublicstaticfinalintLEVEL_RENDER_0= publicstaticfinalint =在父 中定義獲取渲染級(jí)別的方法,默認(rèn)情況下返publicintreturn 方法,將渲染級(jí)別定義在自定義窗口類(lèi)的onDisplayUpate()方法中,在繪制動(dòng)作發(fā)生前,調(diào) 集 方法,傳入比較 ,為集合進(jìn)行排protectedvoid{list.sort(newComparator<Element>(){publicintcompare(Elemente,Elemente2)returne.getOrdere2.getOrder();//自然排序即級(jí)別高的后畫(huà)級(jí)別低的先畫(huà)在子彈 中,定義一個(gè)方法,用來(lái)判斷子彈是否與鋼墻發(fā)生了碰super.getX(),Config.WDTH_BULLET,Config.HEelement.getX(),Config.WDTH_STELL,Config.HE onDisplayUpateprotectedvoidonDisplayUpdate()e:list){instanceofBullet&&e2instanceofSteel){Bulletbullet=(Bullet)e;if(bullet.isHit(e2)){//如果發(fā)生碰撞就讓子彈銷(xiāo)毀Keepinmind定義爆炸 類(lèi),繼 中,定義一個(gè)爆炸方 ,計(jì)算爆炸物坐標(biāo),并返回爆炸物對(duì)publicBlastintx_blast=super.getX()inty_blast=Config.WConfig.HEreturnnewBlast(x_blast, 方法中,如果子彈與鋼墻發(fā)生了碰撞,就調(diào)用鋼墻對(duì) 方法,返回爆炸物對(duì)象并添加到集合中.protectedvoidonDisplayUpdate().//在這里發(fā)生了碰撞,Blastblast=}}}}}publicstaticfinalString[]PATHS_BLAST{"res\\img\\blast_.gif",

publicvoiddraw()i=0;i<Config.PATHS_BLAST.length;i){try{DrawUtils.draw(Config.PATHS_BLAST[i],getX(),getY());}catch(OException{draw(加,因此看不到動(dòng)畫(huà)效果. ,用于記錄索privateintprivateintdraw(publicvoiddraw()Stringpath=;//每次畫(huà)完后都將索引加,if(index==Config.PATHS_BLAST.length){//為了防止越界,數(shù)組最后一個(gè)元素時(shí),index=tryDrawUtils.draw(path,getX(),}catch(OException{ privateprivatebooleanisinish=is 方法中判斷,如果此時(shí)已經(jīng)播放到最后一張圖片,需要將該成員變量重新賦ispublicvoiddraw()Stringpath=Config.PATHS_BLAST[index];index=isinishtrue;//此時(shí)代表播放完畢,將isinish置為tryDrawUtils.draw(path,getX(),}catch(OException{ 類(lèi)中定義銷(xiāo)毀的方法,該方法的返回值依賴(lài)publicbooleanisDestroy(){returnis在自定義窗口類(lèi) protectedvoidonDisplayUpdate()for(intElementelement=if(elementinstanceofBlast){//判斷是否為爆炸物對(duì)象Blastblast=(Blast)element;我們發(fā)現(xiàn),此時(shí)子彈與爆炸物都定義的有銷(xiāo)毀的方法,而銷(xiāo)毀功能屬于擴(kuò)展功能,因此不能在父 中定義,而應(yīng)該定義成接口.因?yàn)榻涌隗w現(xiàn)的是體系的擴(kuò)展功能,而父類(lèi)則體現(xiàn)的是

publicinterfaceDestroyablepublicabstractboolean讓子彈與爆炸物都實(shí)現(xiàn)該接口,優(yōu)化自定義窗口類(lèi) 方法,將兩

}} publicpublicstaticfinalintBLOOD_STEEL=在鋼墻 中定義血量的成員變privateprivateintblood=在鋼墻類(lèi) 方法中,每次被攻擊,都需要減少一滴; 讓鋼墻類(lèi)實(shí)現(xiàn)Destroyablepublicboolean{return和實(shí)現(xiàn)鋼墻的爆炸類(lèi)似,能,因此我們需要抽取出一個(gè)接口publicinterface{publicabstractpublicpublicclassSteelextendsElementimplementspublicclassWallextendsElementimplements修改子彈 的撞擊方 ,將參數(shù)改 類(lèi)publicbooleanisHit(BeAttackablee)優(yōu)化自定義窗口類(lèi) 中的代Blastblast=.}}}}8沒(méi)被摧毀時(shí),播放4張圖片,墻體被摧毀時(shí),再播放8張圖片.為了實(shí)現(xiàn)這個(gè)效果,我們需要在爆炸物 類(lèi)中定義一個(gè)成員變量,用于記錄墻體是否被摧毀 privateprivateboolean接著,在爆炸 類(lèi)中的構(gòu)造方法增加一個(gè)參數(shù),用于給成員變量賦publicBlast(intx,inty,booleanisDie){super(x,y); D D 接著,在爆炸物 方法中,根據(jù)狀態(tài)決定是畫(huà)4張圖片還是畫(huà)8張圖}}else{//如果墻體沒(méi)有被銷(xiāo)毀,就播放4if(index==Config.PATHS_BLAST.length.index=isinish=}}tryDrawUtils.draw(path,getX(),}catch(OExceptione)}2}

方法里,根據(jù)當(dāng)前血量是否為0去創(chuàng)建不同publicBlastbeAttack(){intx_blast=inty_blast=Config.WConfig.HEif(this.blood==0){//如果血量為0,就將isDie的狀態(tài)置為returnnewBlast(x_blast,}else{//否則,將isDie的狀態(tài)置為returnnewBlast(x_blast,

,在發(fā)生碰撞時(shí),根據(jù)圖形分析的結(jié)論重publicbooleanisHit(Element{intx=getX();//獲取坦克橫坐intygetY();//獲取坦克縱坐booleanflagsuper.getY(),Config.WConfig.HEe.getX(),e.getY(),Config.WConfig.HE(flag//當(dāng)發(fā)生碰撞時(shí)y=e.getY()caseConfig.HEy=caseDirection.MOVE_LEConfig.HEcaseDirection.MOVE_Rx= 2}//最后,}return3}Tanktank=(Tank)eSteelsteel=(Steel)}.}}}

publicpublicinterfaceBlockablepublicclasspublicclassSteelextendsElementimplements}publicclassWallextendsElementimplements}publicclassWaterextendsElementimplementsTank

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論