RpgMakerMV原始碼解析 1 輸入管理

2021-08-08 10:07:54 字數 1577 閱讀 8149

在幾乎所有的遊戲框架中都有輸入管理器的存在,作用就是將系統底層的按鍵事件收集起來,然後對外提供乙個簡單的按鍵狀態訪問。

我們接下來就看看在rpgmakermv中的輸入管理實現。

rpgmakermv可以獲取鍵盤輸入,手柄輸入,以及觸屏輸入,分別實現在兩個類input,touchinput裡,兩者大同小異,我們這裡主要看一看input的實現,只要理解了基本概念,分析touchinput也是很簡單的事情。

我們之前說了,輸入管理器首先要從乙個底層的資料來源收集按鍵狀態,在mv中這個資料來源是瀏覽器,當然瀏覽器最後還是會呼叫到作業系統的api。

可以看到,在初始化中就對瀏覽器的鍵盤事件新增了監聽。

我們看看事件處理

具體的狀態設定是在最後一句。

有人可能疑惑這種狀態收集的作用是什麼,主要原因就是底層的事件是瞬時且不穩定的,而狀態是持續的,如果你直接根據瀏覽器的按鍵事件來進行輸入處理,對乙個遊戲來說是不合適的,比如我們可能需要按下右鍵持續向右移動,但是因為瀏覽器的按鍵事件觸發頻率並不是固定的,實際上會出現移動時快時慢的現象,但是我們這邊將狀態儲存起來,就可以避免這種情況。

rmmv這裡狀態設計的比較簡單,只有彈起和按下狀態,分別在onkeydown和onkeyup裡面設定,我們之後會單獨寫一篇輸入管理談一下如何為遊戲框架設計乙個強大的輸入管理器。

按鍵對映,按鍵對映是輸入管理乙個常見的功能,提供按鍵名到實際keycode的對映,這樣我們可以為某個按鍵取乙個別名,在檢測的時候只要檢測該別名就可以,**看上去可讀性更高,還可以把多個按鍵對映到乙個別名上。

比如 if(input.iskeydown(「shoot」))

對映的實際邏輯如下,就是乙個很簡單的查表的過程。

作為乙個輸入管理器最重要的功能就是查詢按鍵狀態

rmmv提供的查詢也比較簡單

input.ispressed 是否處在按下狀態

input.istriggered 是否剛剛按下

input.isrepeated 是否重複按下

input.islongpressed 是否長按

不過rmmv作為乙個rpg遊戲專用型的框架,輸入管理也比通用的輸入管理器更進了一層,他在update中直接將按鍵對映到移動方向

可以從我的github倉庫獲取我做的詳細中文注釋版的rpgmakermv原始碼進行學習,目前還在更新中

Fabric 原始碼解析 原始碼目錄解析

這裡對重要的一些目錄進行說明 bccsp 與密碼學 加密 簽名 證書等等 相關的加密服務 將fabric中用到的密碼學相關的函式抽象成了一組介面,便於拓展。bddtests 一種新型的軟體開發模式 行為驅動開 需求 開發 common 一些公共庫 錯誤處理 日誌處理 賬本儲存 策略以及各種工具等等 ...

Spring原始碼解析之 Aop原始碼解析(2)

spring aop 更多的是oop開發模式的乙個補充,幫助oop以更好的方式來解決對於需要解決業務功能模組之上統一管理 的功能 以一副圖來做為aop功能的說明更直觀些。對於類似系統的安全檢查,系統日誌,事務管理等相關功能,物件導向的開發方法並沒有更好的解決方法 aop引入了一些概念。更多的是spr...

Integer原始碼解析

public class test else integer i3 200 integer i4 200 if i3 i4 else 結果為 原因integer 類會快取 128 到 127 之間的整數 但是如果new interger的話就是不同的物件了 源 分析 如果是在 128到正的127之間...