cocos 3.1.1 lua常有控件

2018-01-06  本文已影响0人  a522050761d0

require "Cocos2d"  

require"Cocos2dConstants"  

-- cclog  

cclog = function(...)  

    print(string.format(...))  

end  

--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")  

    -- avoid memory leak  

collectgarbage("setpause", 100)  

collectgarbage("setstepmul", 5000)  

cc.FileUtils:getInstance():addSearchResolutionsOrder("src");  

cc.FileUtils:getInstance():addSearchResolutionsOrder("res");  

    --support debug  

    local targetPlatform = cc.Application:getInstance():getTargetPlatform()  

if (cc.PLATFORM_OS_IPHONE == targetPlatform) or (cc.PLATFORM_OS_IPAD == targetPlatform) or   

       (cc.PLATFORM_OS_ANDROID == targetPlatform) or (cc.PLATFORM_OS_WINDOWS == targetPlatform) or  

       (cc.PLATFORM_OS_MAC == targetPlatform) then  

cclog("result is ")  

--require('debugger')()  

    end  

    ---------------  

    local visibleSize = cc.Director:getInstance():getVisibleSize()  

    local origin = cc.Director:getInstance():getVisibleOrigin()  

    -- create Layer  

    local function createUILayer()  

        local UILayer = cc.Layer:create()  

        --图片精灵  

local bg = cc.Sprite:create("bg.jpg")  

        bg:setPosition(origin.x + visibleSize.width / 2 + 80, origin.y + visibleSize.height / 2)  

        UILayer:addChild(bg)  

        ---文字标签  

local txt = cc.LabelTTF:create("zhong中文123456780", "Arial", 20)    

        txt:setColor( cc.c3b( 255, 255, 255 ) )    

        txt:setAnchorPoint(cc.p(0,0))  

        txt:setPosition( cc.p( 350,  20 ) )  

        UILayer:addChild(txt)        

        --纯色精灵  

        local boxSprite = cc.Sprite:create()  

        boxSprite:setTextureRect(cc.rect(0,0,80,80))  

        boxSprite:setAnchorPoint(cc.p(0,0))  

        boxSprite:setPosition( cc.p( 350,  40 ) )  

        --cocosdx自动默认是白色  

        --boxSprite:setColor(cc.c3b(255,255,255))  

        UILayer:addChild(boxSprite,8)  

        -- boxSprite:setGlobalZOrder(8)  

        -- 菜单按钮  

        local menuTools  

        local function menuCallbackOpenPopup()  

cclog("ttttttttt")  

        end  

-- add the left-bottom"tools" menu to invoke menuPopup  

local menuToolsItem = cc.MenuItemImage:create("back.png", "back2.png")  

        menuToolsItem:setPosition(0, 0)  

        menuToolsItem:registerScriptTapHandler(menuCallbackOpenPopup)  

        menuTools = cc.Menu:create(menuToolsItem)  

        local itemWidth = menuToolsItem:getContentSize().width  

        local itemHeight = menuToolsItem:getContentSize().height  

        menuTools:setPosition(350, 80)  

        UILayer:addChild(menuTools,15)  

        -- menuTools:setlocalZOrder(5)  

        -- menuTools  

        -- Scale9Sprite 9宫格精灵  

local temp=cc.Sprite:create("btntest0.png");  

        local size=temp:getContentSize();  

        local fullRect=cc.rect(0,0, size.width, size.height)  

        local insetRect = cc.rect(20,20,size.width-40, size.height-40);  

local backGround = cc.Scale9Sprite:create("btntest0.png", fullRect, insetRect )  

        backGround:setPreferredSize(cc.size(100, 50))  

        backGround:setPosition(cc.p(350, 130))  

        backGround:setAnchorPoint(cc.p(0,0))  

        UILayer:addChild(backGround)  

        --进度条精灵  

        -- 创建并初始化进度,第一个参数是duration持续时间,100为进度  

        local to1 = cc.ProgressTo:create(2, 100)  

        local to2 = cc.ProgressTo:create(1, 100)  

        --创建进度条精灵  

local progressSprite=cc.Sprite:create("bgtime2.png")  

        progress1=cc.ProgressTimer:create(progressSprite)  

        --设置进度条类型为BAR    

progress1:setType(cc.PROGRESS_TIMER_TYPE_BAR)--enum  Type { RADIAL, BAR }  

        progress1:setPosition(cc.p(200, 150))  

        --进度动画运动方向,可以多试几个值,看看效果  

--进度条宽高变化//从左到右  

        progress1:setMidpoint(cc.p(0, 0))--注意这里是cc.p  c++中是Vec2  

        progress1:setBarChangeRate(cc.p(1, 0))  

--进度条宽高变化//从下到上   

        -- progress1:setMidpoint(cc.p(0, 0))  

        -- progress1:setBarChangeRate(cc.p(0, 1))  

--//进度条宽高变化//从左到右    

        -- progress1:setMidpoint(cc.p(1, 0))  

        -- progress1:setBarChangeRate(cc.p(1, 0))  

--//    //进度条宽高变化//从上到下   

        -- progress1:setMidpoint(cc.p(1, 0))  

        -- progress1:setBarChangeRate(cc.p(0, 1))  

        progress1:setPercentage(0)--默认是零,可以自行修改  

        UILayer:addChild(progress1, 1)   

        --进度条效果设置 方这里提供了两种  

        --方案1:执行动作  

        --需要有这个runAction才会有动作效果  

        -- progress1:runAction(cc.RepeatForever:create(to1))  

        --方案2:定时器+setPercentage完成(见后面定时器中可见)  

        --圆形的进度条1 顺时针  

local progress3Sprite = cc.Sprite:create("menu1.png")  

        progress3 = cc.ProgressTimer:create(progress3Sprite)  

        progress3:setType(cc.PROGRESS_TIMER_TYPE_RADIAL)--设置类型为圆形    

        progress3:setPosition(cc.p(250, 200))  

        progress3:setScale(0.8)    

progress3:setReverseDirection(false) -- 这是默认的顺时针  

        progress3:setPercentage(0)--默认是零,可以自行修改  

        -- progress3:runAction(cc.RepeatForever:create(to1))  

        UILayer:addChild(progress3, 1)  

        --如果没有runAction是可以直接removeFromParent  如果有runAction需要先停掉  

        ----相同的action会导致报错  最好用不同的action  

        -- progress3:stopAction(cc.RepeatForever:create(to1))  

-- progress3:removeFromParent(true)  

        --圆形的进度条2 逆时针  

local progress2Sprite = cc.Sprite:create("menu1.png")  

        progress2 = cc.ProgressTimer:create(progress2Sprite)  

        progress2:setType(cc.PROGRESS_TIMER_TYPE_RADIAL)--设置类型为圆形  

        progress2:setPosition(cc.p(200, 200))  

        progress2:setScale(0.8)  

progress2:setReverseDirection(true) -- 默认是顺时针 这里设置反向逆时针  

        progress2:runAction(cc.RepeatForever:create(to2))  

        UILayer:addChild(progress2, 1)  

        --[[  

        这里有两个方法可能是比较容易疑惑的:  

        progress:setMidpoint(cc.p(0, 0))  

        setMidpoint()函数是设置进度条的起始点,(0,y)表示最左边,(1,y)表示最右边,(x,1)表示最上面,(x,0)表示最下面。  

        progress:setBarChangeRate(cc.p(1, 0))  

        setBarChangeRate()函数是用来设置进度条动画方向的,(1,0)表示横方向,(0,1)表示纵方向  

        ]]  

        --     cc.Label:createWithTTF  -- 添加标签  cocos ide中可以用   xcode中会报错  

        -- -- 通过初始化文本、字体,字体大小来创建一个Label  

-- local label = cc.Label:createWithTTF("New Renderer", "fonts/arial.ttf", 36)  

        -- label:setColor(cc.c3b(255,255,0)) -- 设置颜色为黄色  

        -- UILayer:addChild(label, 1, 10000) -- 第一个参数为node,第二个参数为zorder,第三个参数是tag  

        -- label:setPosition( cc.p(80, 80))-- 设置位置top,center  

        --创建一个标签,显示进度  

local numsTTF = cc.LabelTTF:create("0", "Thonburi", 18)  

        numsTTF:setPosition(cc.p(250, 150))  

        UILayer:addChild(numsTTF, 1)  

        --Lua 实现定时器功能  

        local scheduler = CCDirector:sharedDirector():getScheduler()  

        local run_logic = nil  

        local x=0  

        --函数定义  

        local function Update()  

            -- print(11)  

if x<100 then  

                x=x+5  

                progress1:setPercentage(x)--这里以设置进度条1作为例子  

                progress3:setPercentage(x)  

numsTTF:setString(""..x.."%")  --这里以设置文字numsTTF的内容作为例子,注意这里的x是数字,需要转换为字符  

            end  

        end  

        --开始倒计时 每1秒调用一次Update方法  

run_logic = scheduler:scheduleScriptFunc(Update,1,false)  --第一个是调用的函数 第二个参数是时间  

        --退出界面 卸载定时器  

        local function onNodeEvent(event)  

if "exit" == event then  

               cc.Director:getInstance():getScheduler():unscheduleScriptEntry(run_logic)  

           end  

        end  

        UILayer:registerScriptHandler(onNodeEvent)  

[plain] view plain copy

  

[plain] view plain copy

        -- 输入框  

        EditName = cc.EditBox:create(cc.size(180, 40), cc.Scale9Sprite:create("btntest0.png"))  

        --   EditName = cc.EditBox:create(editBoxSize, cc.Scale9Sprite:create("btntest0.png"))  

        EditName:setPosition(240, 100)  

        -- --密码输入模式  

        -- EditName:setInputFlag(cc.EDITBOX_INPUT_FLAG_PASSWORD)  

        -- --单行输入  

        -- --EditName:setInputMode(cc.EDITBOX_INPUT_MODE_SINGLELINE)  

        UILayer:addChild(EditName)  

        --         -- 开启委托  

        --         -- EditName:setDelegate(UILayer)  

        -- -- local targetPlatform = cc.Application:getInstance():getTargetPlatform()  

        -- -- if kTargetIphone == targetPlatform or kTargetIpad == targetPlatform then  

        -- --    EditName:setFontName("Paint Boy")  

        -- -- else  

        -- --     EditName:setFontName("fonts/Paint Boy.ttf")  

        -- -- end  

        -- --输入字符个数  

        -- -- EditName:setMaxLength(10)  

        -- -- EditName:setMaxLength(6)  

        -- --输入字体尺寸  

        EditName:setFontSize(25)  

        -- EditName:setFontSize(50)  

        -- --输入字体颜色  

        -- -- EditName:setFontColor(cc.c3b(255,0,0))  

        -- EditName:setFontColor(cc.c3b(0,255,0))  

        -- -- EditName:setFontColor(cc.c3b(5, 4, 10))  

        -- --设置editBox输入为空时的显示状态  

        -- EditName:setPlaceHolder("Nameiiiiiiiiii:")  

        -- -- EditName:setPlaceHolder("点击输入姓名")   

        -- --输入前默认显示字体颜色  

        -- EditName:setPlaceholderFontColor(cc.c3b(255,255,255))  

        -- -- EditName:setMaxLength(8)  

        -- EditName:setReturnType(cc.KEYBOARD_RETURNTYPE_DONE )  

        -- -- --Handler--事件响应  

        -- -- EditName:registerScriptEditBoxHandler(editBoxTextEventHandle)  

        return UILayer  

    end  

    -- run场景 add图层  

    local sceneGame = cc.Scene:create()  

    sceneGame:addChild(createUILayer())  

    if cc.Director:getInstance():getRunningScene() then  

         cc.Director:getInstance():replaceScene(sceneGame)  

    else  

        cc.Director:getInstance():runWithScene(sceneGame)  

    end  

end  

local status, msg = xpcall(main, __G__TRACKBACK__)  

if not status then  

    error(msg)  

end  

上一篇下一篇

猜你喜欢

热点阅读