Luat开源硬件

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

2018-03-23  本文已影响11人  Luat物联网通信模块

本教程目的:主要介绍小游戏的入口菜单,以及怎样在现有游戏的基础上添加新的小游戏。

小游戏界面图片

界面介绍

主菜单里有个小游戏菜单,点击一下进入游戏列表界面。每个界面可以显示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

上一篇下一篇

猜你喜欢

热点阅读