retroarch 真的不像看起來那麼簡單:我踩過的八個坑
retroarch 是什麼
retroarch 是 Libretro 團隊開發的開源複古遊戲模擬器前端——說白了就是一個「模擬器外殼」,本身不包含任何模擬核心,所有模擬工作都交給 Core 插件來做。你裝 Gambatte Core 就能玩 GBA,裝 Genesis Plus GX Core 就能玩 MD,裝 Mednafen PSX Core 就能玩 PS1,支援任天堂、索尼、世嘉、街機等幾十種主機,Android、Windows、macOS 全平台覆蓋。
它的強項遠不止「能玩」兩個字:即時存檔讀檔、自訂手鍵映射、Netplay 聯機對戰、CRT 著色器復刻老式電視掃描線效果、成就同步 RetroAchievements——該有的功能一個都不少,想折騰的玩家能挖出無限花樣。但也正因為可配置的東西太多,新手第一次上手很容易在各種設置裡迷路,以為裝個 APK 就能玩的朋友大概率要被潑冷水——不妨先看 retroarch官網 的入門指南打底。
安裝
retroarch 的 Android APK 體積有 175M,直接下載安裝就行,想省去踩坑的朋友可以先看 retroarch下載 的完整指南,但安裝完還有三步必做,少一步後面都會卡殼:
裝 Core:進入主菜單 → Online Updater → Install Core,從列表裡選你要玩的主機 Core 下載。GBA 推薦 Gambatte,MD 推薦 Genesis Plus GX,PS1 推薦 Mednafen PSX——別一個都沒裝就開始掃 ROM,掃描器直接跳過。
更新數據庫:還是 Online Updater → Update Databases。RetroArch 掃描 ROM 用的是 No-Intro 數據庫做校驗匹配,數據庫過期了就會出現「明明有 ROM 但掃不出來」的情況。
BIOS 文件:如果你要玩 PS1、Dreamcast、土星這類光盤主機,還得自己準備 BIOS 固件文件——放到 RetroArch 根目錄的 System 文件夾裡。RetroArch 不會幫你下 BIOS,這步必須自己解決;BIOS 路徑沒對上,光盤類遊戲直接啟動失敗。
這三步都搞定了才算準備完成,接下來就是真的踩坑環節了。
掃描列表:ROM 都在那裡,為什麼列表空空如也
這是我第一次裝 retroarch 時踩的第一個坑——以為 ROM 文件往目錄裡一扔,掃描一下就能自動生成帶封面的遊戲列表,結果掃完列表空空如也,懷疑是不是 ROM 下壞了。
症狀:ROM 放在 RetroArch/roms/GameBoyAdvance/ 裡,掃描器跑完後列表沒有任何條目,或只掃出來一兩個。
原因:RetroArch 的掃描預設是嚴格匹配 No-Intro 數據庫的——靠 CRC32 校驗值對得上才算數。你從論壇或分享群下的 ROM,很可能被人修改過、加過漢化補丁,校驗值跟官方數據庫對不上,掃描器就直接跳過了。另外還有一個低級錯誤:掃描前沒裝對應主機的 Core,這種情況掃描器會直接忽略那個主機的 ROM,連校驗都不做。
解法:先跑 Online Updater 把 Databases 更新到最新版本;確認 Core 已安裝(主菜單右下角應該能看到當前 Core 名);兩者都對之後還掃不出來,就改用手動掃描——Import Content → Manual Scan,把匹配模式改成只靠文件名(File Name Only),這樣哪怕校驗值對不上也能進列表,只不過會標註為「未識別」,封面圖也可能對不上。
Shader 一開畫面發灰發綠?著色器疊加層數沒清乾淨
我第一次聽說 RetroArch 有 CRT 掃描線著色器,興奮地去 Slang Shaders → crt 目錄裡選了 crt-lottes 載入,結果畫面直接變成灰蒙蒙的一片綠,跟想像中的老式電視復古感完全不一樣。
症狀:載入 CRT 著色器後畫面偏色、發灰,或疊了多層看起來很奇怪。
原因:RetroArch 的 Shader 系統允許最多 16 層疊加渲染——如果你之前在全局設置裡已經留了一層預設(比如上次調的亮度增強),加 CRT 著色器的時候又疊了一次,就會變兩層重疊,畫面直接崩。另外低端 Android GPU 跑 crt-lottes 這種高品質預設會吃滿性能,幀率掉一半不說,色彩渲染精度也會被犧牲。
解法:Quick Menu → Shaders → Load Shader Preset 之前,先點 Clear Shader 把當前所有著色器清乾淨;畫面異常就先 Clear 再重新載入,不要疊加。設備性能一般的話選 crt-pi 預設,計算量比 crt-lottes 小很多,掃描線效果也夠用;追求最高品質才上 crt-lottes。

即時存檔第二天讀不出來——Core 版本綁定你知道嗎
存了一個 .state 即時存檔,晚上玩到關機,第二天再打開 RetroArch 載入這個存檔,結果畫面卡在遊戲啟動畫面或者直接崩潰了——跟我存檔的畫面完全不是一回事。
症狀:今天存的即時存檔明天讀取失敗、畫面錯亂或直接崩潰。
原因:RetroArch 的即時存檔(State Save)是跟 Core 版本嚴格綁定的——你用 Gambatte v1.0 存的 .state 文件,Gambatte v1.1 可能就讀不出來了。這跟 ROM 文件無關,是 libretro 核心內部狀態序列化機制的問題:每次 Core 更新可能都會改變內部狀態結構,舊版本序列化出的字節流新版本解釋不了。
解法:即時存檔只當臨時緩衝用——玩到一半想暫停休息一下,存個 State Save 確保不會丟進度;但關機前一定要讓遊戲自己走一遍內建的存檔流程(Battery Save,.srm/.sav 後綴),這個是穩定的,跨 Core 版本通用。如果已經有一堆 State 讀不出來,去 RetroArch 的 savestates 目錄找對應遊戲的 .srm 文件,那個才是安全的長期存檔。
手鍵映射設了等於沒設——Hotkey Enable 被你漏了
手柄連上後進 RetroArch,Settings → Input → Port 1 Controls 裡把按鍵都重新映射了一遍,進遊戲一按還是原樣——設置完全沒生效的樣子,懷疑是不是手柄驅動有問題。
症狀:自訂的按鍵映射進遊戲後不生效,或只有部分鍵正常、其餘按預設走。
原因:RetroArch 的所有自訂功能鍵(快進、即時存檔、倒帶)都要先按一個「修飾鍵」叫 Hotkey Enable(預設是手柄 L3 或鍵盤 F3),再按功能鍵才會生效。但如果你忘了先按這個修飾鍵、直接按自訂鍵,RetroArch 會把它當成普通輸入處理——看起來就像設置沒生效。另外 Android 上某些藍牙手柄的驅動層會攔截部分按鍵事件,導致 RetroArch 根本收不到,這種情況把手柄切成 XInput 模式試試。
解法:Settings → Input → Input Hotkey Binds 裡先設好 Hotkey Enable 是哪個鍵,建議選一個不容易誤觸的(比如手柄右搖桿按下 R3),平時玩遊戲完全不影響;要用到快進、存檔這些功能的時候,先按住 Hotkey Enable 再按功能鍵。

手機存儲掃不到 ROM?Android 11+ 你得開 SAF
ROM 放在手機內存的 Documents/ 或 Download/ 目錄裡,RetroArch 掃描器彈出錯誤提示「無法訪問此目錄」,換了好幾個路徑都不行,以為是 RetroArch 版本有問題。
症狀:Android 11+ 設備上,掃描器無法訪問手機存儲中的普通目錄。
原因:Android 11 開始強制執行分區存儲(Scoped Storage),所有 App 無法訪問除自己專用目錄之外的文件,除非用 SAF(Storage Access Framework)框架——也就是彈出系統文件選擇器讓你手動授權某個目錄。RetroArch 遵循這個規範,第一次掃描時必須通過 SAF 拿到目錄訪問權限,否則掃描器直接拒絕掃描。
解法:Import Content → Scan Directory → 當彈出 SAF 文件選擇器時,選中你放 ROM 的根目錄(比如內存儲下的 RetroArch 文件夾)並點「允許」,RetroArch 就會記住這個授權。之後掃描任何子目錄都正常了。第一次設置時麻煩一次,之後就不用管了。
防坑清單
踩完這幾個坑之後我總結了一份速查清單,每次裝完 retroarch 先對照過一遍,基本能避開 90% 的問題:
- 裝完先跑 Online Updater:Core + Databases + Thumbnails 三項一個都別漏,這是所有功能正常的基礎
- ROM 掃不出來?先查這兩點:有沒有裝對應主機的 Core?ROM 校驗值能不能跟 No-Intro 數據庫對上
- State Save 只當臨時用:長期存檔一定要靠遊戲內的 Battery Save,別依賴 .state 文件
- Shader 疊加前先 Clear:別讓舊預設跟新載入的 CRT 預設重疊,畫面會直接崩
- Android 11+ 第一次掃描用 SAF 授權:系統文件選擇器彈出來時選 ROM 根目錄並點「允許」
知道這些坑之後,retroarch 其實相當省心——基礎配置對了,剩下的就是挑喜歡的 Core、加喜歡的 Shader、選喜歡的主機坐下來懷舊。它比專為單一主機設計的模擬器麻煩一些,但換來的是一次配置就能玩遍幾十款主機,性價比其實很高。
本文為個人基於網路公開資料整理編寫,非官方內容,僅供學習交流參考;軟體版權歸原作者所有,請支持正版;使用過程中遇到問題請查閱官方管道,本文不承擔任何責任。