freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

參考]基于j2mejavaplatformmicroedition手機(jī)rpg游戲研究(編輯修改稿)

2024-12-14 08:45 本頁(yè)面
 

【文章內(nèi)容簡(jiǎn)介】 for(int h=0。h4。h++){ ms2[h].setPosition(ms2[h].dxsetX,ms2[h].dysetY)。 if(ms2[h].dx(getWidth()+setX) amp。amp。 ms2[h].dxsetX amp。amp。ms2[h].dy(getHeight()+setY)amp。amp。 ms2[h].dysetY){//只對(duì)進(jìn)入屏幕范圍類的精靈才進(jìn)行描繪 ms2[h].paint(g)。 } }//對(duì)精靈類進(jìn)行描繪 下面介紹下關(guān)于在本類中實(shí)現(xiàn)的關(guān)于 怪物類和英雄類的通信 ,如設(shè)計(jì)中所述,關(guān)于 攻擊判斷 都是放在怪物類中寫的,所以,英雄受到攻擊后削減 HP以及打敗怪物后所獲得的獎(jiǎng)勵(lì)等等都只能依靠類之間的通信來(lái)實(shí)現(xiàn),這里我們采用了參數(shù)返回和傳遞的方式,即怪物類返回一些參數(shù),而將這些返回的參數(shù)直接傳遞給英雄類,讓英雄類實(shí)現(xiàn)各類數(shù)據(jù)的更新并且在更新后立即將新的數(shù)據(jù)存入進(jìn)度。具體的 實(shí)現(xiàn)代碼如下: //將怪物類的死亡后的等級(jí)以及各方面信息傳遞到英雄類 private void doMonster(MonsterSprite mSprite,HeroSprite heroSprite,RecordStore rs,int rid){ ((+heroWidth,+heroHeight,getHeight(),getWidth(),heroSprite,),rs,rid)。 } 看起來(lái)比較復(fù)雜,讓我們將他們分解一下,在 MonsterSprite 類中有一個(gè)方法 .主要用于描繪和相應(yīng)的游戲邏輯處理, public int doMovedraw(int heroX,int heroY,int screenHeight,int screenWidth,int heroDir,boolean iisBattle,HeroSprite heroSprite,int heroHp,int herolv,int itemlv),關(guān)于該方法的詳細(xì)解釋會(huì)在怪物類的代碼實(shí)現(xiàn)中有解釋,它擁有一個(gè) int的返回類型,在該方法中,返回的是英雄的 HP 值,而我們也可以看到傳入的參數(shù)中也有英雄的 HP值,即這個(gè)方法中實(shí)現(xiàn)了怪物的描繪和英雄類 HP的變化,同時(shí)在怪物類中具有一個(gè)屬性 deadlv,如果怪物處于生存狀態(tài),該值一直為 0,在怪物類的 doMovedraw( ? )方法中如果怪物死亡就立即將該值賦為怪物等級(jí),而相應(yīng)的英雄類中 處理怪物傳來(lái)的信息的方法就捕獲到該值,然后就對(duì)英雄類的屬性進(jìn)行更新,將更新值存入進(jìn)度 . 接下來(lái)再介紹一下如何將進(jìn)度存入 RMS 中, RMS 即 Record Management System,是由 MIDP提供的數(shù)據(jù)存儲(chǔ)功能,使用這個(gè)功能,就可以存儲(chǔ)游戲狀態(tài),關(guān)于 RMS的詳細(xì)內(nèi)容請(qǐng)有興趣的朋友查閱相關(guān)資料,這里我們這種講述如何實(shí)現(xiàn)進(jìn)度的存儲(chǔ),實(shí)際上由于 RMS的存儲(chǔ)功能遠(yuǎn)遠(yuǎn)不如大型的數(shù)據(jù)庫(kù)功能完善,所以很多地方需要自行設(shè)計(jì)許多東西來(lái)達(dá)到方便的記錄管理, RMS的存儲(chǔ)是逐條地操作,而一條記錄并不存在如大型數(shù)據(jù)庫(kù)中的字段類 的概念,所以,為了實(shí)現(xiàn)類似的功能,只能在程序中將的所有數(shù)據(jù)一次操作。 J2ME中提供了對(duì)二進(jìn)制數(shù)據(jù)進(jìn)行操作的 DataOutputStream類和 ByteArrayOutputSteam類,通過(guò)這兩個(gè)類可以很方便地把各種類型的數(shù)據(jù)轉(zhuǎn)換為二進(jìn)制數(shù)據(jù)并存儲(chǔ)在一行記錄中,例如游戲中英雄類的一次記錄操作包括記錄他的等級(jí),當(dāng)前的裝備,擁有的金錢,物品盒中的物品,經(jīng)驗(yàn)值等,它們的類型有的是 String,有的是 int,就可以按如下的程序?qū)崿F(xiàn)二進(jìn)制數(shù)據(jù)到真實(shí)數(shù)據(jù)的轉(zhuǎn)化: //對(duì)記錄中的數(shù)據(jù)進(jìn)行轉(zhuǎn)化 public static void chgTogame(byte[] data,HeroSprite heroSprite) throws IOException{ ByteArrayInputStream bais=new ByteArrayInputStream(data)。 DataInputStream dis=new DataInputStream(bais)。 =(())。 =(())。 =(())。 =()。 =(())。 =()*8+30。 =()*10+20。 ()。 =()。 } 為了實(shí)現(xiàn)記錄讀取的效果,在此之前需要從進(jìn)度中將記錄讀取出來(lái) 而在記錄實(shí)際使用時(shí): try{//嘗試獲得記錄 rs=(dataname,false)。 //如果不成功則不創(chuàng)建 try{//成功后則嘗試獲取記錄 heroData=(1)。 chgTogame(heroData,heroSprite)。//將記錄轉(zhuǎn)化為實(shí)際數(shù)據(jù) isData1=true。 }catch(Exception e){(沒有獲得記錄 +e)。} }catch(RecordStoreNotFoundException e){//如果沒有成功獲得 try{//關(guān)閉記錄 (沒找到記錄 )。 ()。 rs=null。 isData1=false。 }catch(Exception ex){ } }catch(Exception e){} 接下來(lái)向大家介紹一下 地圖切換 的具體實(shí)現(xiàn),地圖切換在這里我專門使用了一個(gè)方法來(lái)實(shí)現(xiàn),該方法以地圖編號(hào)為參數(shù),進(jìn)行實(shí)例化以及相關(guān)垃圾處理,具體代碼如下: public void gotoMap(int mapDir){ if(mapDir==0){ … //圖 1的對(duì)象撤消 ,具體是將其賦為 NULL try{//描繪新地圖 … //圖 0要用到的圖片加載 }catch(Exception e){} … //實(shí)例化地圖 0要使用的對(duì)象 }else{ … //圖 0的對(duì)象撤消 ,具體是將其賦為 NULL try{//描繪新地圖 … //圖 1要用到的圖片加載 }catch(Exception e){} … //實(shí)例化地圖 1要使用的對(duì)象 } } 而具體的地圖描繪操作則是如下代碼 : mapTiled=null。 =null。//清空地圖 1資料 …… mapTiled=new MapTiled(30,30,mapImage,16,16,getWidth(),getHeight())。 // 加載新地圖資料 (mapDir,setX,setY)。 ()。 (mapTiled)。 這里的 setX,setY是將相對(duì)于地圖左上腳的屏幕左上 腳的坐標(biāo) : (地圖一的情況下 ) setX=()/2+20。//地圖畫的位置的左上腳坐標(biāo) setY=()/2+20。 if(()/2+20=0){ setX=0。 } if(()/2+20=625getWidth()){ setX=625getWidth()。 } if(()/2+20=0){ setY=0。 } if(()/2+20=625getHeight()){ setY=625getHeight()。 } 而實(shí)際上這里的 setX,setY在坐標(biāo)轉(zhuǎn)化的過(guò)程中作用巨大 ,一方面實(shí)現(xiàn)了主角走到邊角人物移動(dòng)而地圖不移動(dòng)的效果 ,另一方面也實(shí)現(xiàn)了絕對(duì)坐標(biāo)和相對(duì) 坐標(biāo)的轉(zhuǎn)化 ,具體的如精靈類 ,怪物類的坐標(biāo)如下 : ms2[h].setPosition(ms2[h].dxsetX,ms2[h].dysetY)。 轉(zhuǎn)化方式如下圖 : 由此可見 ,相對(duì)坐標(biāo)是 (dxsetX,dysetY)決定的 ,而 dx,dy則是 ASprite類定義的精靈類的公有坐標(biāo)屬性 .由此即可實(shí)現(xiàn)相對(duì)屏幕左上的坐標(biāo)和相對(duì)地圖左上坐標(biāo)的轉(zhuǎn)化。 HeroSprite 類以及鍵盤事件,進(jìn)度更新的實(shí)現(xiàn) HeroSprite 類主要實(shí)現(xiàn)英雄的相應(yīng)處理,包括對(duì)英雄的相應(yīng)記錄的更新,以及對(duì)事件的處理,另外包括對(duì)不能行走地圖的檢測(cè)。 首相,對(duì) 記錄的更新 ,具體實(shí)現(xiàn)如下: public byte[] chgTorms(boolean isFirst) throws IOException{ ByteArrayOutputStream baos=new ByteArrayOutputStream()。 DataOutputStream dos=new DataOutputStream(baos)。 if(itemcode!=null){ MyItem=(itemcode)。 } ((lv))。//將具體數(shù)據(jù)寫入流 ((itemlv))。 ((gold))。 ((MyItem))。 ((exp))。 if(isFirst==false){//如果不是第一次讀入數(shù)據(jù)則計(jì)算攻防 at=itemat[itemlv]+(lv1)*8+30。 df=itemdf[itemlv]+(lv1)*10+20。 } ()。 ()。 numEmpty=0。 if(isFirst==false){//如果不是第一次讀入數(shù)據(jù)則計(jì)算空格數(shù) for(int i=0。i。i++){ if(itemcode[i]==39。039。){ numEmpty++。 地圖 屏幕 setX setY 精靈 dx dy } } } return ()。 } 對(duì)怪物的相應(yīng)處理函數(shù)從 SFCanvas中獲得數(shù)據(jù),這一點(diǎn)在之前的 SFCanvas中已有敘述,具體實(shí)現(xiàn)代碼如下: public void doMonster(int myhp,int deadlv,RecordStore rs,int recordid){ =myhp。 if(lv=6){ prevexp=lv*lv*60(lv1)*(lv1)*60+150。//經(jīng)驗(yàn)值公式 nextexp=prevexp+(lv1)*(lv1)*60(lv2)*(lv2)*60+150。 }else{ prevexp=lv*(lv5)*(lv5)40*(lv4)*(lv4)+150。 nextexp=prevexp+50*(lv+1)*(lv4)*(lv4)40*(lv3)*(lv3)+150。 } if(deadlv!=0){ exp=exp+deadlv*15+()%5。//怪物死亡時(shí)候等級(jí)和經(jīng)驗(yàn)值的換算公式, nextexp下一等級(jí)需要的經(jīng)驗(yàn), deadlv被殺死怪物的等級(jí) if(exp=nextexp){ if(lv12){//目前設(shè)定的最高等級(jí)為 11級(jí) lv++。 } at=itemat[itemlv]+(lv1)*8+30。 df=itemdf[itemlv]+(lv1)*10+20。 maxhp=160+(lv1)*40。 hp=maxhp。 } try{ (recordid,chgTorms(false),0,chgTorms(false).length)。 }catch(Exception e){(e)。} isBattle=false。 } } 關(guān)于地圖可行與否的判斷中會(huì)遇到如下問題: 如上圖, 英雄貼著墻站著,而且下一步他就會(huì)進(jìn)到墻里面。我們不會(huì)讓它發(fā)生的。 當(dāng)然在這里可以設(shè)置他即將進(jìn)入的方塊的可行性為 false,在向左行走時(shí)進(jìn)行判斷主角下一步即將 進(jìn)入的方塊可行性,如為 FALSE,則不進(jìn)行坐標(biāo)和幀變化,實(shí)際體現(xiàn)出來(lái)的效果就是不能行走,但在實(shí)際情況中往往沒有這么理想,他可能會(huì)產(chǎn)生如下情況: 由圖可見,如果僅僅判斷精靈類的左上腳,在這樣的情況下,顯然他的下一步是可行的,但實(shí)際上該精靈因?yàn)樽笙履_被擋住,已然無(wú)法前進(jìn),因此在這樣精靈向左走的情況下,實(shí)際是要檢 查左上和左下兩個(gè)地方是否都可以行走的,如果其中有一個(gè)不滿足則不能前進(jìn),與此相似,如果在向右走的過(guò)程中,則需要同時(shí)檢查精靈的右上和右下腳,其他的則以此類推,具體實(shí)現(xiàn)代碼及解釋如下(僅解釋 UP鍵): case LISTENER_UP: if(dir!=DIR_UP){//如果按下 UP鍵時(shí)之前的狀態(tài)不是朝 UP的話,則改變狀態(tài) dir=DIR_UP。 (up_seq)。 } if(isWalkable[ldX][ldY1] amp。amp。 isWalkable[rdX][rdY1]){ //對(duì)下一步的判斷,如前所述 if(isBattle==true){//按下 UP鍵時(shí)候如果是打斗狀態(tài)則轉(zhuǎn)化為 UP奔跑幀 (
點(diǎn)擊復(fù)制文檔內(nèi)容
醫(yī)療健康相關(guān)推薦
文庫(kù)吧 www.dybbs8.com
備案圖片鄂ICP備17016276號(hào)-1