2.ray实现搜索框架
在 raylib 中实现搜索框,主要需要解决三个问题:键盘输入捕捉、光标闪烁动画、以及文本溢出处理。
1. 核心逻辑:即时模式输入
搜索框的本质是一个字符串。每一帧,你都要检查键盘是否有按键被按下,并将其追加到字符串末尾。
2. 代码实现示例
这段代码演示了如何创建一个带圆角阴影、支持退格键(Backspace)和动态光标的现代搜索框。
C++
1 |
|
3. 技术要点解析
- **
GetCharPressed()vsIsKeyPressed()**: 这是新手最容易混淆的地方。IsKeyPressed适合判断单个功能键(如 Enter、Esc)。而GetCharPressed会返回键盘缓冲区里的 Unicode 编码,它能正确处理大写字母(Shift + 键)和其他符号,是做输入框的唯一正确选择。 - 光标闪烁逻辑: 利用
framesCounter。例如(framesCounter / 20) % 2 == 0代表每 20 帧切换一次显示状态,从而产生“呼吸感”。 - **命中测试 (Hit Testing)**: 搜索框必须先被“激活”(Focused)。只有当用户点击了矩形区域,键盘输入才会被监听,这防止了用户在玩游戏移动角色时意外触发搜索。
4. 进阶:如何支持中文输入?
如果你需要支持中文,事情会变得复杂一些:
- 字体支持:你需要使用
LoadFontEx加载一个支持中文的.ttf字体文件。 - **输入法 (IME)**:
raylib本身对 Windows 系统输入法的集成较弱。通常游戏开发者会写一个简单的列表来显示GetCharPressed捕获的内容,或者调用特定的 Win32 API 来呼出系统的输入法窗口。
总结
你现在已经能够处理不规则桌面交互和动态键盘输入了。
下一步:你是否想把这个搜索框与你之前的“毛玻璃”Shader 结合起来?当用户点击搜索框时,背景自动变模糊,这在游戏 UI 中是非常高端的视觉表现。
添加按下回车后打印调试信息
main.cpp
1 |
|
All articles in this blog are licensed under CC BY-NC-SA 4.0 unless stating additionally.
