love2d教程16--简单拼音中文输入法

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

了一些时间。我到铁血丹心论坛(专业的金庸群侠传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则分页显示,“=”键下翻页,“-”

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

shuru

main.lua如下

require('string_zh_cn')

local lg=love.graphics
pinyin="" --拼音
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={}
    end
end

function love.load()
    --设置中文字体
    font=lg.newFont("YaHeiConsolas.ttf",18)
    lg.setFont(font)
end

function love.update()
    getHanzi(pinyin)
end

function 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
    end
end

function 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

posted @ 2013-01-17 21:26  半山th  阅读(1872)  评论(0编辑  收藏  举报