Type: concept
Confidence: 0.85
Created: 2026-04-16
Updated: 2026-04-16
Tags: UrhoXLua输入处理API键盘鼠标触摸手柄游戏开发

UrhoX输入类API

概述

UrhoX Lua 输入模块包含四个核心类:Input(主输入管理器)、Controls(按钮状态快照)、TouchState(触摸点状态)、JoystickState(手柄/摇杆状态)。

关键内容

Input 类(主要 API)

键盘查询

input:GetKeyDown(KEY_SPACE)          -- 按键是否被按住
input:GetKeyPress(KEY_ESCAPE)        -- 本帧是否刚按下(按一次只触发一次)
input:GetScancodeDown(scancode)      -- 按扫描码查询(与键盘布局无关)
input:GetKeyName(KEY_A)              -- 返回键名字符串

鼠标查询

input:GetMouseButtonDown(MOUSEB_LEFT)   -- 鼠标按键按住
input:GetMouseButtonPress(MOUSEB_RIGHT) -- 鼠标按键刚按下
input:GetMousePosition()                -- IntVector2 绝对位置
input:GetMouseMove()                    -- IntVector2 相对移动量
input:GetMouseMoveWheel()               -- int 滚轮值(⚠️ 不是 mouseMove.z)
input:SetMousePosition(pos)             -- 设置鼠标位置
input:CenterMousePosition()             -- 居中鼠标

修饰键

input:GetQualifierDown(QUAL_SHIFT)  -- Shift/Ctrl/Alt 按住
input:GetQualifiers()               -- int 组合修饰键状态

触摸

input.numTouches                    -- 当前触摸点数量
input:GetTouch(index)               -- TouchState*(index 从 0 开始)
input:SetTouchEmulation(true)       -- 用鼠标模拟触摸

手柄

input.numJoysticks
input:GetJoystick(id)               -- JoystickState*
input:GetJoystickByName(name)
input:AddScreenJoystick(layoutFile) -- 添加虚拟摇杆(移动端)

全屏与键盘

input:SetToggleFullscreen(true)     -- 允许 F11 切换全屏
input:SetScreenKeyboardVisible(true) -- 显示软键盘(移动端)

Controls 类(按钮状态快照)

用于在帧间传递和比较输入状态,适合联网和回放场景。

local ctrl = Controls.new()
ctrl:Reset()
ctrl:Set(CTRL_FORWARD, input:GetKeyDown(KEY_W))  -- 设置按钮状态

ctrl:IsDown(CTRL_FORWARD)                         -- 是否按住
ctrl:IsPressed(CTRL_FORWARD, prevControls)        -- 本帧是否刚按下(与上帧比对)

-- 属性
ctrl.buttons   -- unsigned,按钮位掩码
ctrl.yaw       -- float,偏航角
ctrl.pitch     -- float,俯仰角
ctrl.extraData -- VariantMap,自定义扩展数据

TouchState 类

local touch = input:GetTouch(0)
touch.touchID       -- int
touch.position      -- IntVector2 当前位置
touch.lastPosition  -- IntVector2 上帧位置
touch.delta         -- IntVector2 移动量
touch.pressure      -- float 压力值(0.0~1.0)
touch:GetTouchedElement()  -- 触摸到的 UIElement

JoystickState 类

local joy = input:GetJoystick(id)
joy:IsController()              -- 是否为游戏控制器
joy:GetNumButtons()
joy:GetButtonDown(index)        -- 按钮按住
joy:GetButtonPress(index)       -- 按钮刚按下
joy:GetAxisPosition(index)      -- float 轴值(-1.0~1.0)
joy:GetHatPosition(index)       -- int 方向键状态

常用枚举(不要用数字替代)

类别 枚举值
鼠标按钮 MOUSEB_LEFT, MOUSEB_MIDDLE, MOUSEB_RIGHT
修饰键 QUAL_SHIFT, QUAL_CTRL, QUAL_ALT
鼠标模式 MM_ABSOLUTE, MM_RELATIVE, MM_WRAP, MM_FREE
常用按键 KEY_SPACE, KEY_ESCAPE, KEY_RETURN, KEY_W/A/S/D

来源

相关