MonoGame中的中文输入问题的处理

前言

最近我在打算实现文本框输入的时候,碰到了无法输入中文,或者输入法的候选词提示无法显示的问题。打算在此记录的自己的踩坑经验希望对你的开发有所帮助,本文首发

如何解决

这里提一嘴,目前出问题的项目模板是DesktopGL ,如果是WindowDX等其他模板暂时不会出现问题。

一、使用IMEHelper

当然不使用库也是没问题的,可以用monogame提供的TextInput事件,也可以成功输出中文,如果不是DesktopGL 的项目。这个库直接一步到位无需修改,这里我们只讨论DesktopGL 的情况如何使用。

IMEHelper提供我们一个例子,这里我假设你已经了解。如果你在使用后可以正常输入中文 ,且输入法候选词正常跳出,好了,你完全没必要继续看下去的必要了。

二、原因

那么如果出现问题的话该怎么办呢?这其实就是SDL的问题,在网上我了解到貌似是SDL默认是渲染自己的输入法窗口,所以我们应该自己关闭渲染输入法。但是问题在于SDL并没有提供关闭渲染的API(2.0.20版本貌似提供了一个开关,但我并不了解SDL所以不清楚应该如何使用)所以我们要自己编译一个SDL库。

2.1、 使用VS2019 编译SDL

在使用SDL之前先了解一下这几个API

  1. SDL_StartTextInput
  2. SDL_StopTextInput
  3. SDL_SetTextInputRect
  4. SDL_IsTextInputActive

同时 官方教程 里面简单描述了这几个API的作用,这里不在赘述。
在编译之前我们应该下载SDL源码,这里选用的版本是2.0.20。
用VS打开VisualC目录的项目,修改src\video\windows\SDL_windowskeyboard.c。在函数IME_Init中找到如下代码块,删除else语句即可。

    if (WIN_ShouldShowNativeUI())
        videodata->ime_uiless = SDL_FALSE;
    else
        videodata->ime_uiless = UILess_SetupSinks(videodata);

修改完毕后我们选择Release x64(游戏平台所需的版本)生成解决方案。在输出目录找到SDL2.dll文件保存到你游戏项目的根目录,然后替换项目中的SDL2.dll文件即可。这里以在x64为例分别介绍调试和发布时如何使用自己编译的SDL。

2.2、调试

这个比较麻烦因为每次都会重新生成项目,我也找不到模板用的SDL在那个文件,所以这里用一个蠢办法,在项目的生成后事件中使用这行命令

copy $(ProjectDir)\SDL2.dll $(OutDir)\runtimes\win-x64\native\

2.3、发布

只需要替换发布时的SDL2.dll文件即可

三、效果演示

LHHEDA.gif

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值