




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
設置速度.這里的原理與坦克移動的原理類似.即在子彈類的draw()中,改變坐標位置.2publicvoiddraw()intxgetX();intyStringpath="";switch(code){casey=Config.SPEED_BULLET;修改坐標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)}}了,造成這個現象的原因是,在自定義窗口類的onKeyEvent(intkey)方法中,caseKeyboard.KEY_RETURN:bullet=了.因此,我們需要一個容器來存放每次按下回車鍵時生成的子彈對象.caseKeyboard.KEY_RETURN:bullet=tank.shot();然后在自定義窗口類 方法中,遍歷容器并將元素繪制上去protectedvoid{for(Elementelement:{接下來我們需要對子彈發射的頻率做處理,即限制每秒鐘最多發射幾顆子彈.原理是將上次發射間隔,就發射子彈,并將當前時間賦值給上次發射時間.privateprivatelonglastShotTime;//第二步,在坦克類 方法中,判斷間隔時間,從而決定是否發射子publicBulletlongcurrentShotTime=returnlastShotTime=currentShotTime;//returnnewlastShotTimeConfig.TME_NTERVAL){//由于不發射時返 值,為了防止空指針異常,需要在自定義窗口onKeyEvent(int onKeyEvent(intcaseKeyboard.KEY_RETURN:bullet=tank.shot();大,這樣是不太合理的.因此我們需要對子彈進行銷毀.子彈銷毀的時機是越界的一瞬間.因此,我們可以在子彈類中定義一個銷毀的方 ,用于判斷子彈是否被銷毀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接下來,在自定義窗口類的 方法中,當繪制完成后,遍歷集合,如果子彈應該被銷毀,則將集合中的元素進行移除.這里推薦一個不會發生并發修改異常的集 ,使用方式 protectedvoidonDisplayUpdate()for(Elementif(einstanceof Bulletbullet=(Bullet) 類中定義渲染級別的常publicpublicstaticfinalintLEVEL_RENDER_0= publicstaticfinalint =在父 中定義獲取渲染級別的方法,默認情況下返publicintreturn 方法,將渲染級別定義在自定義窗口類的onDisplayUpate()方法中,在繪制動作發生前,調 集 方法,傳入比較 ,為集合進行排protectedvoid{list.sort(newComparator<Element>(){publicintcompare(Elemente,Elemente2)returne.getOrdere2.getOrder();//自然排序即級別高的后畫級別低的先畫在子彈 中,定義一個方法,用來判斷子彈是否與鋼墻發生了碰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)){//如果發生碰撞就讓子彈銷毀Keepinmind定義爆炸 類,繼 中,定義一個爆炸方 ,計算爆炸物坐標,并返回爆炸物對publicBlastintx_blast=super.getX()inty_blast=Config.WConfig.HEreturnnewBlast(x_blast, 方法中,如果子彈與鋼墻發生了碰撞,就調用鋼墻對 方法,返回爆炸物對象并添加到集合中.protectedvoidonDisplayUpdate().//在這里發生了碰撞,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(加,因此看不到動畫效果. ,用于記錄索privateintprivateintdraw(publicvoiddraw()Stringpath=;//每次畫完后都將索引加,if(index==Config.PATHS_BLAST.length){//為了防止越界,數組最后一個元素時,index=tryDrawUtils.draw(path,getX(),}catch(OException{ privateprivatebooleanisinish=is 方法中判斷,如果此時已經播放到最后一張圖片,需要將該成員變量重新賦ispublicvoiddraw()Stringpath=Config.PATHS_BLAST[index];index=isinishtrue;//此時代表播放完畢,將isinish置為tryDrawUtils.draw(path,getX(),}catch(OException{ 類中定義銷毀的方法,該方法的返回值依賴publicbooleanisDestroy(){returnis在自定義窗口類 protectedvoidonDisplayUpdate()for(intElementelement=if(elementinstanceofBlast){//判斷是否為爆炸物對象Blastblast=(Blast)element;我們發現,此時子彈與爆炸物都定義的有銷毀的方法,而銷毀功能屬于擴展功能,因此不能在父 中定義,而應該定義成接口.因為接口體現的是體系的擴展功能,而父類則體現的是
publicinterfaceDestroyablepublicabstractboolean讓子彈與爆炸物都實現該接口,優化自定義窗口類 方法,將兩
}} publicpublicstaticfinalintBLOOD_STEEL=在鋼墻 中定義血量的成員變privateprivateintblood=在鋼墻類 方法中,每次被攻擊,都需要減少一滴; 讓鋼墻類實現Destroyablepublicboolean{return和實現鋼墻的爆炸類似,能,因此我們需要抽取出一個接口publicinterface{publicabstractpublicpublicclassSteelextendsElementimplementspublicclassWallextendsElementimplements修改子彈 的撞擊方 ,將參數改 類publicbooleanisHit(BeAttackablee)優化自定義窗口類 中的代Blastblast=.}}}}8沒被摧毀時,播放4張圖片,墻體被摧毀時,再播放8張圖片.為了實現這個效果,我們需要在爆炸物 類中定義一個成員變量,用于記錄墻體是否被摧毀 privateprivateboolean接著,在爆炸 類中的構造方法增加一個參數,用于給成員變量賦publicBlast(intx,inty,booleanisDie){super(x,y); D D 接著,在爆炸物 方法中,根據狀態決定是畫4張圖片還是畫8張圖}}else{//如果墻體沒有被銷毀,就播放4if(index==Config.PATHS_BLAST.length.index=isinish=}}tryDrawUtils.draw(path,getX(),}catch(OExceptione)}2}
方法里,根據當前血量是否為0去創建不同publicBlastbeAttack(){intx_blast=inty_blast=Config.WConfig.HEif(this.blood==0){//如果血量為0,就將isDie的狀態置為returnnewBlast(x_blast,}else{//否則,將isDie的狀態置為returnnewBlast(x_blast,
,在發生碰撞時,根據圖形分析的結論重publicbooleanisHit(Element{intx=getX();//獲取坦克橫坐intygetY();//獲取坦克縱坐booleanflagsuper.getY(),Config.WConfig.HEe.getX(),e.getY(),Config.WConfig.HE(flag//當發生碰撞時y=e.getY()caseConfig.HEy=caseDirection.MOVE_LEConfig.HEcaseDirection.MOVE_Rx= 2}//最后,}return3}Tanktank=(Tank)eSteelsteel=(Steel)}.}}}
publicpublicinterfaceBlockablepublicclasspublicclassSteelextendsElementimplements}publicclassWallextendsElementimplements}publicclassWaterextendsElementimplementsTank
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 護理管理選擇模擬習題與答案
- 2025職場人都應該掌握的合同法要點
- 鄉村特色產業聯盟構建協議
- 保理融資協議拓展閱讀年
- 多方協作機制協議
- 組織效能測試題及答案
- 紡織物料檢驗程序試題及答案
- 2025福建莆田市數字集團有限公司公開選聘11名專業人才筆試參考題庫附帶答案詳解
- 2025廣西北海市城市開發投資集團有限公司招聘9人筆試參考題庫附帶答案詳解
- 2025年河南國控建設集團招聘工作人員58人筆試參考題庫附帶答案詳解
- 廣東省深圳市南山區2024-2025學年第一學期期末考試九年級英語試卷(含答案)
- 【MOOC】心理學基礎-上海大學 中國大學慕課MOOC答案
- 《西方經濟學(本)》形考任務(1-6)試題答案解析
- 2025屆上海高中高考英語三模試卷含解析
- 產后出血介入手術護理
- 國家安全反對邪教
- 2025年春九年級語文下冊 第三單元綜合測試卷(人教陜西版)
- 創業創新執行力學習通超星期末考試答案章節答案2024年
- 2024秋期國家開放大學《可編程控制器應用實訓》一平臺在線形考(形成任務1)試題及答案
- 人民醫院樣本外送檢測管理制度
- 工業視覺系統運維員-國家職業標準(2023年版)
評論
0/150
提交評論