游戏中的Unicode输入处理

Roy*_*Roy 3 c++ opengl unicode sdl

我有一个游戏,要求我允许玩家通过网络互相聊天.一切都很好,除了玩家可以键入Unicode输入的部分.

所以,这个问题可以分为两部分:

  • 玩家输入时,如何捕获输入?我之前通过游戏输入处理(轮询)完成了这项工作,但是,它不像Windows Forms那样响应.

  • 将输入捕获到字符串后,如何使用TrueType字体输出?我问这个的原因是因为通常,我会在游戏开始时使用游戏中使用的所有文本构建位图字体.但是使用unicode输入,需要将近10k个字符,这在游戏开始时是不可能的.

PS我的目标输入语言更具体针对中文,韩文和日文.

Gru*_*bel 8

输入

  1. 使用SDL_EnableUNICODE启用unicode输入处理
  2. 像往常一样接收SDL_KeyboardEvent
  3. 使用SDL_keysymunicode成员 获取unicode

用于渲染

如果所需的字体大小相当小,例如16px,你实际上可以将它全部渲染到单个纹理,你可以在1024x1024纹理上适合该大小的最小4096个字形,当你紧紧包装它们时多一点(参见fontgen)例如代码).这应该足以进行常见聊天,但不足以适应TTF文件的所有字形.

如果你不想使用更大的纹理大小,你必须按需生成字体,这样做只需像往常一样创建纹理,然后使用glTexSubImage2D将新的字形上传到纹理.

另一种选择是不使用纹理来表示字形,而是使用文本本身.这样你就可以绕过字形生成产生的所有麻烦.但对于非静态可编辑文本,它可能不是一个好主意.