999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

基于Java的簡單2DRPG游戲系統設計

2019-06-27 06:42:09楊理哲張秀梅
科技資訊 2019年9期
關鍵詞:游戲

楊理哲 張秀梅

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

關鍵詞:Java? RPG? 游戲? swing? 腳本

中圖分類號:TP311? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?文獻標識碼:A? ? ? ? ? ? ? ? ? ? ? ? ? 文章編號:1672-3791(2019)03(c)-0021-02

1? 游戲系統結構

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

2? 圖形界面

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

窗口在創建后會創建多個panel,分別用來顯示游戲中不同的界面。當游戲需要進行頁面切換時只需要調整這些panel之間的可視性即可。各個面板在被顯示的時候都會執行響應的操作,存取檔的panel在被顯示的時候會加載本地的存檔索引。設置界面的panel在被顯示的時候會根據當前的設置顯示對應的數據。游戲界面的panel在被顯示的時候會實例化一個線程用于游戲的主循環。

2.1 雙緩沖刷新畫面

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

2.2 循環渲染延時

游戲畫面的渲染放在了游戲的主循環中,每次循環更新過游戲數據后,渲染模塊才會根據最新的數據進行游戲畫面的渲染,并進行響應的延時。

系統默認畫面幀數為60幀,也就是說理想情況下每幀應該用時16.67ms。每幀渲染后延時模塊會用1/60減去本幀從開始到結束所用的時間和上一幀多耗費的納秒時間,得到本幀應該延時的時間。如果本幀超過了自己應該用的時間就放棄本次延時。當放棄達到某一數量就讓自己的CPU使用時間一次。

3? 數據文件

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

3.1 地圖配置文件

一張地圖有時會有多個圖層,可能會有對應的BGM,地圖中的某些位置可能無法移動,也可能會觸發某些事件。這些信息就需要記錄在地圖的配置文件當中。配置文件包含地圖的寬高、地圖圖片的地址、地圖對應的事件二維數組、地圖中自動觸發事件的編號,以及可以行走的區域編號、地圖默認的BGM編號。

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

3.2 角色配置文件

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

3.3 腳本文件

每張地圖中都會有很多個事件,每個事件都對應著一個腳本文件,在玩家觸發此事件的時候,腳本解釋器就會根據所處的地圖,到本地圖對應的腳本文件夾下加載對應的腳本文件,解釋器對腳本中每條命令進行順序執行。

3.4 存檔文件

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

在玩家進行存檔操作時,系統會將保存事件進度的數組、保存物品有無的長整型、當前玩家所在地圖編號、玩家在當前地圖的坐標這幾個數據輸出到本地的存檔文件。

當需要繼續游戲時,系統只需要讀取本地的存檔數據,再跟進存檔加載其他文件就可以繼續游戲。

3.5 事件索引文件

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

事件索引文件中記錄的是每個地圖中一共有多少事件,腳本系統會根據這個文件來為各個事件分配id。這樣某個腳本在需要修改其他事件進度的時候,就可以地圖編號和事件編號得到那個事件的id。

4? 腳本系統

系統采用了自主設計的腳本格式和對應的腳本解釋模塊。將所有事件根據地圖順序進行統一編號。將每一個事件對應到一個獨立的腳本文件。把每個事件可能對應的不同情況以分步的方式寫在事件對應的腳本文件中,解釋器會根據玩家的操作、其他事件完成情況、玩家的狀態等來選擇對應的步驟執行。

通過這種腳本命令可以實現以下功能:

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

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

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

腳本命令大致分為兩類。

需要玩家響應的:解釋器在讀取到這一行命令時就會進入循環判斷玩家是否有做出一些響應。只有在有響應時才會執行這一行命令。否則會一直等待玩家的響應。

不需要玩家響應的:解釋器在讀取到這一行命令的時候會進行一些與本命令有關的條件判斷,如果滿足就直接執行,不等待玩家的響應。

5? 玩家控制

系統通過對AWT事件的監聽處理來獲取玩家的控制輸入。在主循環中每次更新游戲時會根據讀取到的控制信息來更新系統中各個對象的狀態。

游戲中的角色在系統中被抽象為一個矩形,在角色移動的時候,系統會以這個矩形的四邊和地圖對應的事件數組為基礎,對角色的移動進行碰撞檢測。如果下一次移動角色會進入不能進入的區域,系統將會把角色的位置信息更新為緊貼著區域邊界,以防止角色越界。

6? 結語

該游戲系統通過Java代碼實現了以上部分,完成了作為一個簡單RPG游戲系統所需要的基本功能。通過對這些部分的組合運用,可以實現很多游戲效果。其中大部分模塊都可以單獨作為組件,只需要給它對應的配置文件,就可以在其他代碼中復用。但是在某些地方還存在著一些缺陷,比如渲染延時會使游戲內時間收到影響、畫面渲染時前后兩幀可能浪費了時間因為大部分區域沒有發生變化等。這些問題還需要進行優化。

參考文獻

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

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

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

猜你喜歡
游戲
做游戲
夜間游戲
游戲
送信游戲
數獨游戲
瘋狂的游戲
飛碟探索(2016年11期)2016-11-14 19:34:47
爆笑游戲
第八章直接逃出游戲
小學科學(2015年7期)2015-07-29 22:29:00
第八章 直接逃出游戲
小學科學(2015年6期)2015-07-01 14:30:14
游戲五計算
主站蜘蛛池模板: 热久久综合这里只有精品电影| 亚洲第一成年人网站| 伊人久久久久久久| 一区二区欧美日韩高清免费| 国产精品香蕉在线观看不卡| 欧美在线伊人| 国产成人a在线观看视频| 免费a级毛片18以上观看精品| 国产xx在线观看| 久久中文电影| 大香网伊人久久综合网2020| 天堂亚洲网| 99热这里只有精品免费| 久久婷婷色综合老司机| 欧美无遮挡国产欧美另类| 国产成人久视频免费| 欧美一级高清片欧美国产欧美| 国产99热| 国产午夜福利亚洲第一| 91黄视频在线观看| 伊人AV天堂| 2022国产91精品久久久久久| 欧洲av毛片| 97综合久久| 97久久超碰极品视觉盛宴| 国语少妇高潮| 国产黄网永久免费| 人妻丝袜无码视频| 97视频免费在线观看| 好久久免费视频高清| 中文字幕在线一区二区在线| 亚洲国产一区在线观看| 日韩无码视频播放| 18禁高潮出水呻吟娇喘蜜芽| 亚洲人成网站18禁动漫无码| 国产成人亚洲精品蜜芽影院| 在线视频精品一区| 狠狠操夜夜爽| 久久午夜夜伦鲁鲁片无码免费| 高清精品美女在线播放| 欧美在线网| 亚洲无线一二三四区男男| 97精品国产高清久久久久蜜芽| 四虎影视8848永久精品| 亚洲色无码专线精品观看| 国产青青草视频| 国产真实乱人视频| 国产精品毛片一区| 99热这里只有精品免费| 美女内射视频WWW网站午夜| 国产97视频在线| 欧美不卡视频在线观看| 亚洲综合九九| 九九热精品免费视频| 91娇喘视频| 欧美性猛交xxxx乱大交极品| 精品少妇人妻一区二区| 亚洲大学生视频在线播放| 九色在线视频导航91| 久久超级碰| 国产精品免费久久久久影院无码| 日本在线视频免费| 欧美97色| 超清无码熟妇人妻AV在线绿巨人| 91亚洲免费视频| 亚洲成aⅴ人在线观看| 婷婷色丁香综合激情| 伦伦影院精品一区| 国产成人亚洲综合a∨婷婷| 日韩无码视频播放| 九色综合伊人久久富二代| 国产一级特黄aa级特黄裸毛片| 国产chinese男男gay视频网| 超清无码一区二区三区| 精品少妇人妻av无码久久| 亚洲精品高清视频| 国产特级毛片aaaaaaa高清| 国产成人1024精品| 国产福利微拍精品一区二区| 欧美97欧美综合色伦图| 网友自拍视频精品区| 亚洲天堂免费|