加载中…
正文 字体大小:

LUAT实例教程:儿童手表小游戏开发

(2018-03-23 10:36:12)
分类: GPRS模块
 本教程目的:主要介绍小游戏的入口菜单,以及怎样在现有游戏的基础上添加新的小游戏。

小游戏界面图片

界面介绍

主菜单里有个小游戏菜单,点击一下进入游戏列表界面。每个界面可以显示3个游戏菜单。上下滑动显示不同的游戏菜单。点击相应的菜单,就可以进入相应的游戏去玩了。

游戏代码介绍

游戏菜单是在minigame.lua里实现的。
minigame() 入口函数


    local items = {
        'math', 'english', 'chinese', 'guessnumber', 'baicizhan', 'guessidiom','mysnake'
    }

items 应用游戏列表图片名称,例如:math 对应图片是放在image文件夹下的math.png


    local enters = {
        quickmath, english100, hanzi140, guessnumber, baicizhan, guessidiom, mySnake
    }

enters 放对应游戏的入口函数,例如:数学对应的入口函数为:quickmath,quickmath是在文件夹windows下quickmath.lua脚本里实现的。

ui.window 创建游戏窗口对象。


        draw = function()
            putimage()
            disp.update()
        end,

画出当前窗口界面。


    local function putimage()
        disp.setbkcolor(BLACK)
        disp.clear()
        disp.putimage(bg_image,0, 0)
        local highlight2 = highlight*3
        for i = 0,2 do
            local item = (highlight2 % #items) + 1 + i
            if item > #items then return end
            disp.putimage(items[(highlight2 % #items) + 1 + i] .. '.png', 12, i*42+5)
        end    
    end

每个游戏界面是有三个游戏菜单组成,disp.putimage(bg_image,0, 0)
画出游戏背景图。


        for i = 0,2 do
            local item = (highlight2 % #items) + 1 + i
            if item > #items then return end
            disp.putimage(items[(highlight2 % #items) + 1 + i] .. '.png', 12, i*42+5)
        end

画出当前窗口对应的游戏列表,最多显示3个游戏。


        pendown = function(x,y)
            lasty = y
            moved = nil
        end,

触屏按下消息处理,主要记录按下时候的y坐标。


penup = function(x,y)
            if not moved then
                if y < 37 then
                    ui.enter(enters[highlight*3 + 1]())
                elseif y > 47 and y < 79 then
                    ui.enter(enters[highlight*3 + 2]())
                elseif y > 89 then
                    ui.enter(enters[highlight*3 + 3]())
                end
                return
            end
            if offset > -10 and offset < 10 then
                offset = 0
                disp.update()
                return
            end
            local delta = offset > 0 and 1 or -1 
            offset = 0
            highlight = (highlight - delta) % ((#items+2)/3)
            putimage()
            disp.update()
        end,

手离开触屏上报的消息,会根据moved状态进行不同操作。上下滑动会切换不同游戏菜单。点击会进入相应的游戏操作。


                if y < 37 then
                    ui.enter(enters[highlight*3 + 1]())
                elseif y > 47 and y < 79 then
                    ui.enter(enters[highlight*3 + 2]())
                elseif y > 89 then
                    ui.enter(enters[highlight*3 + 3]())
                end

根据点击坐标y和highlight高亮菜单项来决定具体进入哪个游戏。
根据highlight高亮菜单项,来决定显示哪些菜单。


        penmove = function(x,y)
            moved = true
            local movey = y -lasty
            if movey > -10 and movey < 10 then return end
            offset = offset + movey
            if offset > 128 then offset = 128
            elseif offset < -128 then offset = -128
            end
            lasty = y
        end,

触屏上报移动消息,根据这个算出offset偏移量,然后在上报penup消息的时候根据这个offset算出当前的高亮菜单项highlight。

如何添加新游戏到当前菜单

1.在main.lua里require自已的游戏脚本。
例如:require"quickmath" 就是添加了实现数学游戏的quickmath.lua脚本。
2.在minigame.lua里的items表里添加对应游戏列表图片。注意图片是PNG格式。要用现有图片的格式。例如:'math'
3.在minigame.lua里的enters表里添加应用游戏的入口函数。例如:quickmath。
新游戏按要求放在上面2,3两项的表后之后,这个新游戏菜单就会添加到原来游戏的后面了。
4.如有铃声资源,则放在audio文件夹下。播放铃声直接调下面接口即可。
audio.play('/ldata/game_over.mp3')。/ldata/这个固定不变,game_over.mp3这个替换成自个铃声资源即可。

具体游戏开发就靠各位自个开动脑筋了,也可以参考现有游戏进行开发。
现有游戏为:数学,英语,语文,猜数列,百词斩,猜成语,贪吃蛇。
对应游戏脚本:quickmath.lua english100.lua hanzi140.lua
guessnumber.lua baicizhan.lua guessidiom.lua snake.lua

0

阅读 评论 收藏 转载 喜欢 打印举报
  • 评论加载中,请稍候...
发评论

    发评论

    以上网友发言只代表其个人观点,不代表新浪网的观点或立场。

      

    新浪BLOG意见反馈留言板 电话:4006900000 提示音后按1键(按当地市话标准计费) 欢迎批评指正

    新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 会员注册 | 产品答疑

    新浪公司 版权所有