Skip to content

手机GUI

文档版本:基于 2026-06-01 代码分析

概述

手机GUI是逃走中MOD最重要的客户端界面,模拟真实智能手机的操作体验。以 NFAPhoneScreen 为核心容器,包含 10 种页面类型,支持 APP 网格桌面、锁屏滑动解锁、拨号盘、联系人、通话、消息、逃走中通知等功能。

手机界面以 2560x1440 为屏幕基准分辨率,通过 PhoneUiScaleMath.min(screenW/baseW, screenH/baseH) 等比缩放。手机本体尺寸为 637×1065 基准像素,支持左下/右下停靠偏好(通过 PhoneClientConfigphone_ui.position 配置项切换)。


核心概念

10 种页面类型

枚举值功能
LOCKNFAPhoneLockScreenPage锁屏:数字时钟、机主名、"上滑解锁"
MAINNFAPhoneMainScreenPage桌面:4列APP图标网格+红点通知
CONTACTSNFAPhoneContactsPage联系人列表+搜索
CONTACT_DETAILNFAPhoneContactDetailPage联系人名片+操作按钮
CALLSNFAPhoneCallsPage拨号盘+通话记录
CALL_SESSIONNFAPhoneCallSessionPage通话中界面
MESSAGESNFAPhoneMessagesPage消息线程列表
MESSAGE_DETAILNFAPhoneMessageDetailPage对话详情
RFMNFAPhoneRfmPage逃走中APP首页
RFM_NOTICESNFAPhoneRfmNoticesPage逃走中通知卡片列表

架构设计

屏幕框架层级

mermaid
graph TB
    subgraph Screen["NFAPhoneScreen (Screen + MenuAccess)"]
        Frame["PhoneScreenFrame<br/>坐标计算: 外框/显示区/Home键/顶部栏"]
        Renderer["PhoneScreenFrameRenderer<br/>九宫格背景/Home键/状态栏"]
        Pages["Map<PhonePageType, NFAPhonePage><br/>10个页面映射"]
        Current["currentPage<br/>当前活跃页面"]
    end

    subgraph Atlas["纹理图集 (3个)"]
        Base["PHONE_BASE<br/>256x280 手机壳/APP图标"]
        Widgets["PHONE_WIDGETS<br/>256x256 按钮九宫格/HUD"]
        Time["TIME_DISPLAY<br/>128x128 数码管数字"]
    end

    subgraph Render["渲染工具"]
        NineSlice["PhoneUiRenderManager<br/>九宫格拉伸/缩放区域"]
        Number["PhoneUiNumberManager<br/>数码管数字渲染"]
        Scale["PhoneUiScale<br/>基准分辨率等比缩放"]
    end

    Screen --> Atlas
    Screen --> Render

页面导航流程

mermaid
flowchart TD
    LOCK["LOCK<br/>锁屏"] -->|"上滑解锁"| MAIN["MAIN<br/>桌面"]
    
    MAIN -->|"点击APP"| CONTACTS["CONTACTS<br/>联系人"]
    MAIN -->|"点击APP"| CALLS["CALLS<br/>拨号盘"]
    MAIN -->|"点击APP"| MESSAGES["MESSAGES<br/>消息"]
    MAIN -->|"点击APP"| RFM["RFM<br/>逃走中APP"]

    CONTACTS -->|"点击联系人"| CONTACT_DETAIL["CONTACT_DETAIL<br/>名片详情"]
    CALLS -->|"通话建立"| CALL_SESSION["CALL_SESSION<br/>通话中"]
    MESSAGES -->|"点击线程"| MESSAGE_DETAIL["MESSAGE_DETAIL<br/>对话"]
    RFM -->|"自动跳转"| RFM_NOTICES["RFM_NOTICES<br/>通知列表"]

    CALL_SESSION -.->|"自动跳转(来电)"| LOCK

关键文件

文件说明
com/chenxi/chenxi_rfm/client/screen/NFAPhoneScreen.java手机屏幕容器
com/chenxi/chenxi_rfm/client/screen/phone/core/NFAPhonePage.java页面接口
com/chenxi/chenxi_rfm/client/screen/phone/core/PhonePageType.java页面类型枚举
com/chenxi/chenxi_rfm/client/screen/phone/shell/PhoneScreenFrame.java框架坐标计算
com/chenxi/chenxi_rfm/client/screen/phone/shell/PhoneScreenFrameRenderer.java框架渲染
com/chenxi/chenxi_rfm/client/screen/phone/shell/NFAPhoneLockScreenPage.java锁屏页
com/chenxi/chenxi_rfm/client/screen/phone/shell/NFAPhoneMainScreenPage.java桌面主页
com/chenxi/chenxi_rfm/client/ui/phone/PhoneUiRenderManager.java九宫格/缩放渲染
com/chenxi/chenxi_rfm/client/ui/phone/PhoneUiNumberManager.java数码管数字渲染
com/chenxi/chenxi_rfm/client/ui/phone/PhoneUiStyle.javaUI 坐标常量
com/chenxi/chenxi_rfm/client/ui/phone/PhoneUiScale.java等比缩放工具
com/chenxi/chenxi_rfm/client/ui/atlas/ClientUiAtlasManager.java图集管理器
com/chenxi/chenxi_rfm/client/event/ClientPhoneCallHudEvents.java通话状态HUD(非手机界面时叠加)
com/chenxi/chenxi_rfm/client/config/PhoneClientConfig.java手机UI客户端配置(位置偏好等)

关键流程

桌面 APP 网格

  • 4 列网格布局,动态计算列间距
  • 预置 5 个 APP:注册(register)、联系人(contacts)、电话(calls)、信息(messages)、逃走中(rfm)
  • 每个 APP 由 AppDefinition record 定义(名称、显示名、图集 UV坐标)
  • 支持红点通知标记

锁屏滑动解锁

  • 上滑拖动检测 Y 轴偏移
  • 达到阈值(DRAG_UNLOCK_THRESHOLD = 0.4)视为解锁
  • 插值动画过渡

通话自动跳转

  • 当客户端检测到进行中的通话(PhoneClientCallState),init() 强制跳转到 CALL_SESSION 页面
  • 记录返回页,通话结束后恢复

UI 组件

  • 九宫格渲染drawNineSlice() 用于按钮、面板、HUD 背景
  • 数字时钟:从 TIME_DISPLAY 图集读取 0-9 字形(8x15像素每字)
  • 搜索输入框PhoneSearchBox 用于联系人/名称搜索

注意事项

  1. 手机界面以 2560x1440 基准分辨率设计,低分辨率下可能模糊
  2. 所有页面实现 NFAPhonePage 接口,坐标使用偏移参数传递
  3. 图集 UV 坐标硬编码在 PhoneUiStyle
  4. 通话中打开手机会自动跳到通话页面
  5. 页面间导航通过 navigateTo(PhonePageType) 实现
  6. 通话HUD:当手机界面关闭但通话进行中时,ClientPhoneCallHudEvents 会在屏幕右侧渲染通话状态条(显示对方名称和通话状态),基于 1440p 高度等比缩放

相关文档