博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
love2d教程16--简单拼音中文输入法
阅读量:6112 次
发布时间:2019-06-21

本文共 2624 字,大约阅读时间需要 8 分钟。

说明这几天没有更新主要是因为回家了,有些琐事,而且家里没网又跑去镇里的营业厅办网花费

了一些时间。我到铁血丹心论坛(专业的金庸群侠传mod论坛)上逛了一下,浏览了一些高手的帖子,

决定先做一个rpg游戏的框架,资源的加载采取插件的形式,这样以后可以更方便的重用已有的代码。

这篇是gui的继续,由于loveframe不支持中文,我便有了直接实现一个中文输入法的想法。由于还

没有完全实现,而且loveframe连显示中文都不支持,只做了一个非常简单的示例。

中文输入法就是一个转换器,把我们输入的音码/形码/其它码,转换为汉字,要想实现这种转换需要一个转码表。

我到百度文库里找到了一个所有汉字拼音的码表,用查找替换加手动修改

做成了一个lua的table(惭愧,使用Linux却不会用sed和awk),部分代码如下:

string_zh_cn       ={}string_zh_cn.a     ={
"啊","阿","嗄","腌","锕","錒",}string_zh_cn.ai ={
"爱","矮","挨","哎","碍","癌","艾","唉","哀",
还有的字省略
,}

在main.lua里首先检测键盘,把输入的拼音到string_zh_cn里查表,把查到的汉字先保存到一个临时的

汉字表里。如果临时表里的汉字个数小于9,则直接显示,若大于9则分页显示,“=”键下翻页,“-”

键下翻页。效果如图:(现在还无法删除屏幕上的汉字,希望读者指正)

main.lua如下

require('string_zh_cn')local lg=love.graphicspinyin="" --拼音hanzi={} --显示的汉字page=1 --页数zi="" --选择的字--从输入的pinyin查string_zh_cn表里对应的汉字function getHanzi(pinyin)    --pinyin对应的所有汉字表    local tmp= string_zh_cn[pinyin]    --只从得到的汉字表tmp里取出9个    if tmp then        if(#tmp >9) then        --判断某个拼音下汉字的个数可以分成几个组(每组9个)            local rows=math.ceil(#tmp/9)             --page是页数,按“=”页数加1,“-”页数减1            if page>rows then                page=rows            elseif page<1 then                page=1            end            for i=1,9 do            --把取出的9个汉字放到hanzi表里                hanzi[i]=tmp[i+(page-1)*9]            end        else            hanzi=tmp        end    else        hanzi={}    endendfunction love.load()    --设置中文字体    font=lg.newFont("YaHeiConsolas.ttf",18)    lg.setFont(font)endfunction love.update()    getHanzi(pinyin)endfunction love.draw()    lg.print("fps: " .. love.timer.getFPS(), 20,20)    lg.print("请输入拼音:" .. pinyin,100,100)    lg.print("汉字:".. zi,300,100)    if hanzi then        for i,v in ipairs(hanzi) do                    lg.print(i .. "." .. v,100+i*40,140)            if love.keyboard.isDown(i .. "") then                pinyin=""                zi=zi..v            end        end    endendfunction love.keypressed(key, unicode)    --输入拼音    local chars="abcdefghijklmnopqrstuvwxyz"    if(string.find(chars,key)) then        pinyin=pinyin .. key    end        if key=="backspace" then        pinyin=string.sub(pinyin,1,string.len(pinyin)-1)        --[[        if pinyin~="" then        pinyin=string.sub(pinyin,1,string.len(pinyin)-1)        else        --按退格键删除一个汉字 此处有问题        hanzi=string.sub(hanzi,1,string.len(hanzi)-2)        end        ]]    end    if key=="=" then        page=page+1    end    if key=="-" then        page=page-1    end    end

接下来会继续探讨碰撞检测,物理效果,把gui先放到一边.

代码下载(已clone的直接git pull),字体我放到font目录下。

git clone git://gitcafe.com/dwdcth/love2d-tutor.git
或git clone https://github.com/dwdcth/mylove2d-tutor-in-chinese.git

转载地址:http://lhdka.baihongyu.com/

你可能感兴趣的文章
IIS负载均衡
查看>>
分布式事务,EventBus 解决方案:CAP【中文文档】
查看>>
Linux下的CPU性能瓶颈分析案例
查看>>
spring mvc入门
查看>>
2012在数据库技术会议上的讲话PPT打包
查看>>
【Android】 TextView设置个别字体样式
查看>>
python svn
查看>>
raise语句
查看>>
sequence2(高精度dp)
查看>>
如何向 Linux 内核上游提交 Patch ?
查看>>
Go编程笔记(7)
查看>>
Go语言int类型绑定方法
查看>>
pid控制的文章
查看>>
MySQL中EXPLAIN命令详解
查看>>
redis 单点部署
查看>>
Java中需要编码的场景
查看>>
PHP生成word的三种方式
查看>>
设计模式(九)——桥接模式
查看>>
xen 创建本地存储
查看>>
TCP三次握手/四次挥手 | NAT介绍 |OSI与TCP/IP模型
查看>>