Lua_间隔动作

require "Cocos2d"
require "Cocos2dConstants"

-- for CCLuaEngine traceback
function __G__TRACKBACK__(msg)
    cclog("----------------------------------------")
    cclog("LUA ERROR: " .. tostring(msg) .. "\n")
    cclog(debug.traceback())
    cclog("----------------------------------------")
    return msg
end

local function main()
    collectgarbage("collect")
    --避免内存泄漏
    collectgarbage("setpause", 100)
    collectgarbage("setstepmul", 5000)
    
    --初始化导演
    local director = cc.Director:getInstance()
    local glview = director:getOpenGLView()
    if glview == nil then
        glview = cc.GLView:createWithRect("HelloLua", cc.rect(0, 0, 960, 640))
        director:setOpenGLView(glview)
    end

    glview:setDesignResolutionSize(960, 640, cc.ResolutionPolicy.SHOW_ALL)

    --显示帧率
    director:setDisplayStats(true)

    --设置帧率
    director:setAnimationInterval(1.0 / 60)

    --增加搜索路径
    cc.FileUtils:getInstance():addSearchPath("src")
    cc.FileUtils:getInstance():addSearchPath("res")
    
    --创建场景
    local scene = require("GameScene")
    local settingScene = scene.create()
    
    --运行场景
    if cc.Director:getInstance():getRunningScene() then
        cc.Director:getInstance():replaceScene(settingScene)
    else
        cc.Director:getInstance():runWithScene(settingScene)
    end
end

xpcall(main, __G__TRACKBACK__)
require "Cocos2d"
require "Cocos2dConstants"


local size = cc.Director:getInstance():getWinSize()

local debug = true
cclog = function(...)
    if debug then
        print(string.format(...))
    end
end

local GameScene = class("GameScene",function()
    local scene = cc.Scene:createWithPhysics()
    scene:getPhysicsWorld():setDebugDrawMask(cc.PhysicsWorld.DEBUGDRAW_ALL)
    return scene
end)

function GameScene:ctor()
    self.visibleSize = cc.Director:getInstance():getVisibleSize()
    self.origin = cc.Director:getInstance():getVisibleOrigin()
end

function GameScene.create()
    local scene = GameScene.new()
    scene:addChild(scene:createAction())

    return scene
end

function GameScene:createAction()
    
    local layer = cc.Layer:create()

    local bg = cc.Sprite:create("Background.png")
    bg:setPosition(cc.p(size.width/2, size.height/2))
    layer:addChild(bg)

    local function OnClickMenu(tag, menuItemSender)
        cclog("tag = %d", tag)
        actionFlag = menuItemSender:getTag()

        local scene = require("ActionScene")
        local actionScene = scene.create()
        local tranScene = cc.TransitionJumpZoom:create(1, actionScene)
        cc.Director:getInstance():pushScene(tranScene)
    end

    local pItmLabel1 = cc.Label:createWithBMFont("fonts/fnt2.fnt","MoveTo")
    local pItmMenu1 = cc.MenuItemLabel:create(pItmLabel1)
    pItmMenu1:setTag(kMoveTo)
    pItmMenu1:registerScriptTapHandler(OnClickMenu)

    local pItmLabel2 = cc.Label:createWithBMFont("fonts/fnt2.fnt", "MoveBy")
    local pItmMenu2 = cc.MenuItemLabel:create(pItmLabel2)
    pItmMenu2:setTag(kMoveBy)
    pItmMenu2:registerScriptTapHandler(OnClickMenu)

    local pItmLabel3 = cc.Label:createWithBMFont("fonts/fnt2.fnt", "JumpTo")
    local pItmMenu3 = cc.MenuItemLabel:create(pItmLabel3)
    pItmMenu3:setTag(kJumpTo)
    pItmMenu3:registerScriptTapHandler(OnClickMenu)

    local pItmLabel4 = cc.Label:createWithBMFont("fonts/fnt2.fnt", "JumpBy")
    local pItmMenu4 = cc.MenuItemLabel:create(pItmLabel4)
    pItmMenu4:setTag(kJumpBy)
    pItmMenu4:registerScriptTapHandler(OnClickMenu)

    local pItmLabel5 = cc.Label:createWithBMFont("fonts/fnt2.fnt", "BezierBy")
    local pItmMenu5 = cc.MenuItemLabel:create(pItmLabel5)
    pItmMenu5:setTag(kBezierBy)
    pItmMenu5:registerScriptTapHandler(OnClickMenu)

    local pItmLabel6 = cc.Label:createWithBMFont("fonts/fnt2.fnt", "ScaleTo")
    local pItmMenu6 = cc.MenuItemLabel:create(pItmLabel6)
    pItmMenu6:setTag(kScaleTo)
    pItmMenu6:registerScriptTapHandler(OnClickMenu)

    local pItmLabel7 = cc.Label:createWithBMFont("fonts/fnt2.fnt", "ScaleBy")
    local pItmMenu7 = cc.MenuItemLabel:create(pItmLabel7)
    pItmMenu7:setTag(kScaleBy)
    pItmMenu7:registerScriptTapHandler(OnClickMenu)

    local pItmLabel8 = cc.Label:createWithBMFont("fonts/fnt2.fnt", "RotateTo")
    local pItmMenu8 = cc.MenuItemLabel:create(pItmLabel8)
    pItmMenu8:setTag(kRotateTo)
    pItmMenu8:registerScriptTapHandler(OnClickMenu)

    local pItmLabel9 = cc.Label:createWithBMFont("fonts/fnt2.fnt", "RotateBy")
    local pItmMenu9 = cc.MenuItemLabel:create(pItmLabel9)
    pItmMenu9:setTag(kRotateBy)
    pItmMenu9:registerScriptTapHandler(OnClickMenu)

    local pItmLabel10 = cc.Label:createWithBMFont("fonts/fnt2.fnt", "Blink")
    local pItmMenu10 = cc.MenuItemLabel:create(pItmLabel10)
    pItmMenu10:setTag(kBlink)
    pItmMenu10:registerScriptTapHandler(OnClickMenu)

    local pItmLabel11 = cc.Label:createWithBMFont("fonts/fnt2.fnt", "TintTo")
    local pItmMenu11 = cc.MenuItemLabel:create(pItmLabel11)
    pItmMenu11:setTag(kTintTo)
    pItmMenu11:registerScriptTapHandler(OnClickMenu)

    local pItmLabel12 = cc.Label:createWithBMFont("fonts/fnt2.fnt", "TintBy")
    local pItmMenu12 = cc.MenuItemLabel:create(pItmLabel12)
    pItmMenu12:setTag(kTintBy)
    pItmMenu12:registerScriptTapHandler(OnClickMenu)

    local pItmLabel13 = cc.Label:createWithBMFont("fonts/fnt2.fnt", "FadeTo")
    local pItmMenu13 = cc.MenuItemLabel:create(pItmLabel13)
    pItmMenu13:setTag(kFadeTo)
    pItmMenu13:registerScriptTapHandler(OnClickMenu)

    local pItmLabel14 = cc.Label:createWithBMFont("fonts/fnt2.fnt", "FadeIn")
    local pItmMenu14 = cc.MenuItemLabel:create(pItmLabel14)
    pItmMenu14:setTag(kFadeIn)
    pItmMenu14:registerScriptTapHandler(OnClickMenu)

    local pItmLabel15 = cc.Label:createWithBMFont("fonts/fnt2.fnt", "FadeOut")
    local pItmMenu15 = cc.MenuItemLabel:create(pItmLabel15)
    pItmMenu15:setTag(kFadeOut)
    pItmMenu15:registerScriptTapHandler(OnClickMenu)

    local menu = cc.Menu:create(
        pItmMenu1, pItmMenu2, pItmMenu3,
        pItmMenu4, pItmMenu5, pItmMenu6,
        pItmMenu7, pItmMenu8, pItmMenu9,
        pItmMenu10, pItmMenu11, pItmMenu12,
        pItmMenu13, pItmMenu14, pItmMenu15
    )
    menu:alignItemsInColumns(3, 3, 3, 3, 3)
    layer:addChild(menu)

    return layer
end

return GameScene
require "Cocos2d"
require "Cocos2dConstants"

local size = cc.Director:getInstance():getWinSize()

local ActionScene = class("ActionScene",function()
    return cc.Scene:create()
end)

function ActionScene:ctor()
    cclog("ActionScene init")
end

function ActionScene.create()
    local scene = ActionScene.new()
    scene:addChild(scene:createLayer())
    return scene
end

function ActionScene:createLayer()
    -- 间隔动作
    cclog("ActionScene actionFlag = %d", actionFlag)
    local layer = cc.Layer:create()

    local bg = cc.Sprite:create("Background.png")
    bg:setPosition(cc.p(size.width/2, size.height/2))
    layer:addChild(bg)

    local sprite = cc.Sprite:create("hero.png")
    sprite:setPosition(cc.p(size.width / 2, size.height / 2))
    layer:addChild(sprite)

    local backMenuItem = cc.MenuItemImage:create("Back-up.png","Back-down.png")
    backMenuItem:setPosition(cc.Director:getInstance():convertToGL(cc.p(140, 65)))

    local goMenuItem = cc.MenuItemImage:create("Go-up.png","Go-down.png")
    goMenuItem:setPosition(cc.Director:getInstance():convertToGL(cc.p(820, 540)))

    local menu = cc.Menu:create(backMenuItem, goMenuItem)
    menu:setPosition(cc.p(0, 0))
    layer:addChild(menu)

    local function backMenu(pSender)
        cclog("ActionScene backMenu")
        cc.Director:getInstance():popScene()
    end
    backMenuItem:registerScriptTapHandler(backMenu)

    local function goMenu(pSender)
        local p = cc.p(math.random() * size.width, math.random() * size.height)

        if actionFlag == kMoveTo then
            sprite:runAction(cc.MoveTo:create(2,cc.p(size.width - 50, size.height - 50)))
        elseif actionFlag == kMoveBy then
            sprite:runAction(cc.MoveBy:create(2,cc.p(-50, -50)))
        elseif actionFlag == kJumpTo then
            sprite:runAction(cc.JumpTo:create(2,cc.p(150, 50),30,5))
        elseif actionFlag == kJumpBy then
            sprite:runAction(cc.JumpBy:create(2,cc.p(100, 100),30,5))
        elseif actionFlag == kBezierBy then
            local bezier = 
            {
                cc.p(0, size.height / 2),
                cc.p(300, - size.height / 2),
                cc.p(100, 100)
            }
            sprite:runAction(cc.BezierBy:create(3,bezier))
        elseif actionFlag == kScaleTo then
            sprite:runAction(cc.ScaleTo:create(2, 4))
        elseif actionFlag == kScaleBy then
            sprite:runAction(cc.ScaleBy:create(2, 0.5))
        elseif actionFlag == kRotateTo then
            sprite:runAction(cc.RotateTo:create(2,180))
        elseif actionFlag == kRotateBy then
            sprite:runAction(cc.RotateBy:create(2,-180))
        elseif actionFlag == kBlink then
            sprite:runAction(cc.Blink:create(3, 5))
        elseif actionFlag == kTintTo then
            sprite:runAction(cc.TintTo:create(2, 255, 0, 0))
        elseif actionFlag == kTintBy then
            sprite:runAction(cc.TintBy:create(0.5,0, 255, 255))
        elseif actionFlag == kFadeTo then
            sprite:runAction(cc.FadeTo:create(1, 80))
        elseif actionFlag == kFadeIn then
            sprite:setOpacity(10)
            sprite:runAction(cc.FadeIn:create(5))
        elseif actionFlag == kFadeOut then
            sprite:runAction(cc.FadeOut:create(5))
        end
    end
    goMenuItem:registerScriptTapHandler(goMenu)

    return layer
end

return ActionScene



罗技设备的 Lua 编程为用户提供了强大的宏和自动化功能,适用于游戏、编程及日常操作等多个场景。学习如何使用罗技设备进行 Lua 编程,首先需要了解其开发环境、基本语法以及与硬件交互的方式。 ### 开发环境设置 罗技设备的 Lua 脚本主要通过 **Logitech G Hub** 软件运行。确保已安装最新版 G Hub,并在“分配”选项卡中选择某个按键作为脚本触发器。随后可在“脚本”部分编或导入 Lua 代码[^1]。 ### 基础语法与结构 Lua 是一种轻量级脚本语言,易于上手。以下是一个简单的示例,展示如何在按下指定按键时输出一个字符串: ```lua function OnEvent(event, arg) if event == "MOUSE_BUTTON_PRESSED" and arg == 1 then OutputLogMessage("Left mouse button pressed\n") end end ``` 此函数监听鼠标按键事件,当左键(arg == 1)被按下时输出日志信息。 ### 控制设备行为 可以通过 `PressKey` 和 `ReleaseKey` 函数模拟键盘按键动作,例如实现自动连点功能: ```lua function OnEvent(event, arg) if event == "MOUSE_BUTTON_PRESSED" and arg == 2 then for i = 1, 5 do PressKey("a") Sleep(100) ReleaseKey("a") Sleep(100) end end end ``` 该脚本在右键被按下时连续输入字母 a 五次,每次间隔 100 毫秒。 ### 自定义宏与复杂逻辑 高级用户可利用 Lua 实现状态机、定时任务等复杂逻辑。例如,以下代码展示了如何创建一个切换开关: ```lua local toggle = false function OnEvent(event, arg) if event == "MOUSE_BUTTON_PRESSED" and arg == 3 then toggle = not toggle if toggle then OutputLogMessage("Toggled ON\n") else OutputLogMessage("Toggled OFF\n") end end end ``` 此脚本通过点击鼠标中键切换布尔变量 `toggle` 的状态,并输出当前状态。 ### 学习资源推荐 - **官方文档**:《罗技G系列Lua API参考文档(中文版)》提供详尽的 API 描述和示例。 - **社区交流**:参与罗技官方论坛和技术博客,获取进阶技巧和调试经验。 - **实践项目**:尝试编如自动射击、快捷命令、游戏辅助等功能性脚本以加深理解。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值