亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

        基于Java的簡單2DRPG游戲系統(tǒng)設(shè)計(jì)

        2019-06-27 06:42:09楊理哲張秀梅
        科技資訊 2019年9期
        關(guān)鍵詞:腳本游戲

        楊理哲 張秀梅

        摘? 要:近年來游戲的發(fā)展十分迅速,中國成為了全球最大的游戲市場,而且游戲行業(yè)的整體收入還在不斷增長。2D像素風(fēng)RPG游戲在二三十年前曾經(jīng)紅極一時(shí),憑借自身的特點(diǎn),在今天也得到了很多人的喜愛。而Java具有很多特性,用Java開發(fā)的軟件可以方便地移植到不同的平臺(tái)上。而游戲玩家使用的操作系統(tǒng)并不統(tǒng)一,為了方便游戲在各種系統(tǒng)下的穩(wěn)定運(yùn)行,所以采用了Java進(jìn)行編碼。

        關(guān)鍵詞:Java? RPG? 游戲? swing? 腳本

        中圖分類號(hào):TP311? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?文獻(xiàn)標(biāo)識(shí)碼:A? ? ? ? ? ? ? ? ? ? ? ? ? 文章編號(hào):1672-3791(2019)03(c)-0021-02

        1? 游戲系統(tǒng)結(jié)構(gòu)

        該游戲系統(tǒng)使用Java的swing來建立GUI界面。除此之外,它的系統(tǒng)中包括了碰撞檢測、畫面渲染、音效、腳本處理、文件I/O等部分。利用swing的事件監(jiān)聽來接收玩家的操作。碰撞檢測用來限制玩家的移動(dòng)范圍。畫面渲染部分將多個(gè)圖層以及特效繪制在屏幕上。在事件觸發(fā)時(shí)由音效部分來播放各種音樂。腳本處理用來處理提取編寫好的游戲腳本,引導(dǎo)游戲發(fā)展。文件I/O部分用于游戲從本地加載數(shù)據(jù)或保存數(shù)據(jù)。

        2? 圖形界面

        當(dāng)程序開始運(yùn)行后首先加載本地的各種配置文件,如果配置文件正常,就會(huì)通過配置中的信息來創(chuàng)建窗口,通過用窗口監(jiān)聽AWT事件來接收所有玩家的控制,并根據(jù)具體的事件類型進(jìn)行反饋。

        窗口在創(chuàng)建后會(huì)創(chuàng)建多個(gè)panel,分別用來顯示游戲中不同的界面。當(dāng)游戲需要進(jìn)行頁面切換時(shí)只需要調(diào)整這些panel之間的可視性即可。各個(gè)面板在被顯示的時(shí)候都會(huì)執(zhí)行響應(yīng)的操作,存取檔的panel在被顯示的時(shí)候會(huì)加載本地的存檔索引。設(shè)置界面的panel在被顯示的時(shí)候會(huì)根據(jù)當(dāng)前的設(shè)置顯示對應(yīng)的數(shù)據(jù)。游戲界面的panel在被顯示的時(shí)候會(huì)實(shí)例化一個(gè)線程用于游戲的主循環(huán)。

        2.1 雙緩沖刷新畫面

        由于游戲畫面分為多個(gè)圖層,而且人物之間也有可能出現(xiàn)覆蓋,如果將每個(gè)圖像直接刷新在屏幕上可能會(huì)造成游戲畫面的閃爍。為了防止這種情況出現(xiàn),系統(tǒng)會(huì)將所有需要刷新的畫面提前處理。將這些圖像先在內(nèi)存中繪制到一張圖上,等到游戲下一幀刷新時(shí)再一次性刷新到屏幕,這樣可以有效提高畫面質(zhì)量。

        2.2 循環(huán)渲染延時(shí)

        游戲畫面的渲染放在了游戲的主循環(huán)中,每次循環(huán)更新過游戲數(shù)據(jù)后,渲染模塊才會(huì)根據(jù)最新的數(shù)據(jù)進(jìn)行游戲畫面的渲染,并進(jìn)行響應(yīng)的延時(shí)。

        系統(tǒng)默認(rèn)畫面幀數(shù)為60幀,也就是說理想情況下每幀應(yīng)該用時(shí)16.67ms。每幀渲染后延時(shí)模塊會(huì)用1/60減去本幀從開始到結(jié)束所用的時(shí)間和上一幀多耗費(fèi)的納秒時(shí)間,得到本幀應(yīng)該延時(shí)的時(shí)間。如果本幀超過了自己應(yīng)該用的時(shí)間就放棄本次延時(shí)。當(dāng)放棄達(dá)到某一數(shù)量就讓自己的CPU使用時(shí)間一次。

        3? 數(shù)據(jù)文件

        游戲中需要用到很多的本地文件,或者有些信息必須從本地加載,為了統(tǒng)一加載這些數(shù)據(jù),每種都有其對應(yīng)的數(shù)據(jù)文件。

        3.1 地圖配置文件

        一張地圖有時(shí)會(huì)有多個(gè)圖層,可能會(huì)有對應(yīng)的BGM,地圖中的某些位置可能無法移動(dòng),也可能會(huì)觸發(fā)某些事件。這些信息就需要記錄在地圖的配置文件當(dāng)中。配置文件包含地圖的寬高、地圖圖片的地址、地圖對應(yīng)的事件二維數(shù)組、地圖中自動(dòng)觸發(fā)事件的編號(hào),以及可以行走的區(qū)域編號(hào)、地圖默認(rèn)的BGM編號(hào)。

        所有地圖配置文件的地址存在一個(gè)地圖配置索引文件中,這個(gè)文件在程序初始化階段被加載。

        3.2 角色配置文件

        每個(gè)角色都有自己對應(yīng)的立繪、id、名字等數(shù)據(jù),這些數(shù)據(jù)被保存在角色配置文件中,此文件包含所有角色的名字、立繪地址、行走圖地址,以數(shù)據(jù)的順序作為角色的id。此文件在程序初始化時(shí)被加載,并且根據(jù)其中信息在程序中實(shí)例化角色的對象。

        3.3 腳本文件

        每張地圖中都會(huì)有很多個(gè)事件,每個(gè)事件都對應(yīng)著一個(gè)腳本文件,在玩家觸發(fā)此事件的時(shí)候,腳本解釋器就會(huì)根據(jù)所處的地圖,到本地圖對應(yīng)的腳本文件夾下加載對應(yīng)的腳本文件,解釋器對腳本中每條命令進(jìn)行順序執(zhí)行。

        3.4 存檔文件

        游戲中事件觸發(fā)的順序,每個(gè)事件需要實(shí)行的步驟都被保存在一個(gè)數(shù)組中。游戲中玩家對物品的擁有情況只分為有或沒有,為了節(jié)省空間使用壓位法將數(shù)據(jù)保存在一個(gè)64位的長整形中。

        在玩家進(jìn)行存檔操作時(shí),系統(tǒng)會(huì)將保存事件進(jìn)度的數(shù)組、保存物品有無的長整型、當(dāng)前玩家所在地圖編號(hào)、玩家在當(dāng)前地圖的坐標(biāo)這幾個(gè)數(shù)據(jù)輸出到本地的存檔文件。

        當(dāng)需要繼續(xù)游戲時(shí),系統(tǒng)只需要讀取本地的存檔數(shù)據(jù),再跟進(jìn)存檔加載其他文件就可以繼續(xù)游戲。

        3.5 事件索引文件

        為了方便維護(hù)和修改,每張地圖中的腳本編號(hào)都是重新開始的,這樣避免了想在靠前的地圖中加入新腳本時(shí)需要把所有后面的腳本編號(hào)后移的問題。

        事件索引文件中記錄的是每個(gè)地圖中一共有多少事件,腳本系統(tǒng)會(huì)根據(jù)這個(gè)文件來為各個(gè)事件分配id。這樣某個(gè)腳本在需要修改其他事件進(jìn)度的時(shí)候,就可以地圖編號(hào)和事件編號(hào)得到那個(gè)事件的id。

        4? 腳本系統(tǒng)

        系統(tǒng)采用了自主設(shè)計(jì)的腳本格式和對應(yīng)的腳本解釋模塊。將所有事件根據(jù)地圖順序進(jìn)行統(tǒng)一編號(hào)。將每一個(gè)事件對應(yīng)到一個(gè)獨(dú)立的腳本文件。把每個(gè)事件可能對應(yīng)的不同情況以分步的方式寫在事件對應(yīng)的腳本文件中,解釋器會(huì)根據(jù)玩家的操作、其他事件完成情況、玩家的狀態(tài)等來選擇對應(yīng)的步驟執(zhí)行。

        通過這種腳本命令可以實(shí)現(xiàn)以下功能:

        (1)控制顯示,切換或取消圖片、特效、對話、表情;(2)在沒有玩家控制的情況下移動(dòng)人物;(3)播放各種音效;(4)切換地圖;(5)修改各個(gè)事件的完成度;(6)顯示選擇框來讓玩家做判斷。

        通過這些功能,基本可以滿足游戲的敘事和過場表演的效果。

        事件觸發(fā)后,解釋器會(huì)首先判斷當(dāng)前玩家是否滿足此事件的觸發(fā)要求,如果滿足就開始按行讀取并執(zhí)行腳本。

        腳本命令大致分為兩類。

        需要玩家響應(yīng)的:解釋器在讀取到這一行命令時(shí)就會(huì)進(jìn)入循環(huán)判斷玩家是否有做出一些響應(yīng)。只有在有響應(yīng)時(shí)才會(huì)執(zhí)行這一行命令。否則會(huì)一直等待玩家的響應(yīng)。

        不需要玩家響應(yīng)的:解釋器在讀取到這一行命令的時(shí)候會(huì)進(jìn)行一些與本命令有關(guān)的條件判斷,如果滿足就直接執(zhí)行,不等待玩家的響應(yīng)。

        5? 玩家控制

        系統(tǒng)通過對AWT事件的監(jiān)聽處理來獲取玩家的控制輸入。在主循環(huán)中每次更新游戲時(shí)會(huì)根據(jù)讀取到的控制信息來更新系統(tǒng)中各個(gè)對象的狀態(tài)。

        游戲中的角色在系統(tǒng)中被抽象為一個(gè)矩形,在角色移動(dòng)的時(shí)候,系統(tǒng)會(huì)以這個(gè)矩形的四邊和地圖對應(yīng)的事件數(shù)組為基礎(chǔ),對角色的移動(dòng)進(jìn)行碰撞檢測。如果下一次移動(dòng)角色會(huì)進(jìn)入不能進(jìn)入的區(qū)域,系統(tǒng)將會(huì)把角色的位置信息更新為緊貼著區(qū)域邊界,以防止角色越界。

        6? 結(jié)語

        該游戲系統(tǒng)通過Java代碼實(shí)現(xiàn)了以上部分,完成了作為一個(gè)簡單RPG游戲系統(tǒng)所需要的基本功能。通過對這些部分的組合運(yùn)用,可以實(shí)現(xiàn)很多游戲效果。其中大部分模塊都可以單獨(dú)作為組件,只需要給它對應(yīng)的配置文件,就可以在其他代碼中復(fù)用。但是在某些地方還存在著一些缺陷,比如渲染延時(shí)會(huì)使游戲內(nèi)時(shí)間收到影響、畫面渲染時(shí)前后兩幀可能浪費(fèi)了時(shí)間因?yàn)榇蟛糠謪^(qū)域沒有發(fā)生變化等。這些問題還需要進(jìn)行優(yōu)化。

        參考文獻(xiàn)

        [1] 邱仲潘.Java游戲編程[M].北京:科學(xué)出版社,2004:32.

        [2] 趙滿來.可視化Java GUI程序設(shè)計(jì)教程——基于Swing組件庫及NetBeans IDE[M].北京:清華大學(xué)出版社,2015.

        [3] Gregory J,葉勁峰.游戲引擎架構(gòu)[M].北京:電子工業(yè)出版社,2014:277-356.

        猜你喜歡
        腳本游戲
        酒駕
        安奇奇與小cool 龍(第二回)
        數(shù)據(jù)庫系統(tǒng)shell腳本應(yīng)用
        電子測試(2018年14期)2018-09-26 06:04:24
        快樂假期
        數(shù)獨(dú)游戲
        瘋狂的游戲
        飛碟探索(2016年11期)2016-11-14 19:34:47
        爆笑游戲
        第八章直接逃出游戲
        变态 另类 欧美 大码 日韩 | 九九热在线视频观看这里只有精品| 婷婷一区二区三区在线| 亚洲一区二区三区自拍麻豆| 极品人妻被黑人中出种子| 中文字幕精品一二三四五六七八| 亚洲国产A∨无码影院| av网站在线观看二区| 国产精品国产三级第一集| 国产裸拍裸体视频在线观看| 中文毛片无遮挡高潮| 大又黄又粗又爽少妇毛片| 久久久久久久久无码精品亚洲日韩 | 国产成人精品三级在线影院| 青青草视频在线免费视频| 美女国产毛片a区内射| 日日噜噜噜夜夜爽爽狠狠视频| 久久这里只精品国产2| 91中文在线九色视频| 久久精品国产亚洲av久| 亚洲熟妇丰满大屁股熟妇| 中文亚洲AV片在线观看无码| 亚州中文热码在线视频| 人人妻一区二区三区| 国产精品露脸张开双腿| 黄色国产一区在线观看| 麻豆精品国产av在线网址| 亚洲综合区图片小说区| 依依成人影视国产精品| 亚洲人成精品久久熟女| 国产动作大片中文字幕| 伊人网综合在线视频| 日本女优中文字幕四季视频网站 | 亚洲熟妇无码一区二区三区导航| 久久成年片色大黄全免费网站 | 免费人成视频x8x8入口| 国产一区二区精品在线观看| 日本成年少妇人妻中文字幕| 日本熟妇人妻xxxx| 欧美日韩精品一区二区在线视频| 亚洲国产一区二区三区视频在线|