关闭幻灯片菜单

时间:2015-03-24 07:34:47

标签: android ios menu lua corona

尝试使用功能https://coronalabs.com/blog/2014/04/08/widgets-creating-a-sliding-panel/中的幻灯片菜单 我完全按照建议的代码,创建了一个包含3个文本和一个按钮的面板。然后我在按钮上添加了一个事件来关闭面板,但它不起作用。无法理解为什么.. :(。这是代码:

local panel = widget.newPanel
{
    location = "left",
    --onComplete = panelTransDone,
    width = display.contentWidth * 0.8,
    height = display.contentHeight * 0.8,
    speed = 500,
    --inEasing = easing.outBack,
    outEasing = easing.outCubic
}

panel.background = display.newRect( 100, -50, 900, 730 )
panel.background:setFillColor( 0.1, 0.1, 0.1, 0.9 )
panel:insert( panel.background )

panel.item1 = display.newText( "GAME DESCRIPTION", 0, 0, native.systemFontBold, 40 )
panel.item1:setFillColor( 1, 1, 0 )
panel.item1.x = -95
panel.item1.y = -350
panel:insert( panel.item1 )

panel.item2 = display.newText( "SET SOUNDS", 0, 0, native.systemFontBold, 40 )
panel.item2:setFillColor( 1, 1, 0 )
panel.item2.x = -170
panel.item2.y = -250
panel:insert( panel.item2 )

panel.item3 = display.newText( "CHECK SCORE", 0, 0, native.systemFontBold, 40 )
panel.item3:setFillColor( 1, 1, 0 )
panel.item3.x = -150
panel.item3.y = -150
panel:insert( panel.item3 )

panel.item4 = display.newText( "CLOSE", 0, 0, native.systemFontBold, 40 )
panel.item4:setFillColor( 1, 1, 0 )
panel.item4.x = -230
panel.item4.y = -50
panel:insert( panel.item4 )

local bottoneex = widget.newButton
{
    --defaultFile = "play.png",
    label="ESCI",
    labelColor = 
    { 
        default = { 1, 1, 0, 255 },
    },
    font = native.systemFont,
    fontSize = 40,
    emboss = false,
    textonly = true,
    onEvent = provap
}

bottoneex.x = -250
bottoneex.y = 50

panel:insert( bottoneex )


function apripanel()
    panel:show()
    panel:toFront()
end

function provap()
    panel:hide()
end

我的目标是通过在此面板中添加多个菜单项来构建幻灯片菜单。我怎样才能做到这一点?我尝试了一个按钮(textonly = true),但我不确定......如果我添加displaytext(就像我一样)会怎样?如何将listeners添加到texts

抱歉愚蠢的问题,但我不再使用这种语言! :)

非常感谢你的帮助!乌瓦尔多希

1 个答案:

答案 0 :(得分:1)

隐藏菜单对我有用,也许您使用旧版newPanel.lua,这应该适合您。

<强> main.lua

widget = require("widget")
require("newPanel")

BG = display.newRect(160,240,300,460)
BG:setFillColor( 0.1, 0.1, 0.1, 1.0 )

local panel = widget.newPanel
{
    location = "left",
    onComplete = panelTransDone,
    width = display.contentWidth*0.8,
    height = display.contentHeight,
    speed = 500,
    inEasing = easing.outBack,
    outEasing = easing.outCubic
}

panel.background = display.newRect( 0, 0, 320, 480 )
panel.background:setFillColor( 0.3, 0.3, 0.3, 0.9 )
panel:insert( panel.background )

panel.item1 = display.newText( "Item1", 0, 0, native.systemFontBold, 10 )
panel.item1:setFillColor( 1, 1, 0 )
panel:insert( panel.item1 )

local function ButtonEvent1(e)
  if ( "ended" == e.phase ) then
        print( "Button 1" )
        panel:show()
        panel:toFront()

    end
end

local function ButtonEvent2(e)
  if ( "ended" == e.phase ) then
        print( "Button 1" )
        panel:hide()
    end
end


local B1 = widget.newButton({left = 100,top = 200,id = "button1",label = "Show",onEvent = ButtonEvent1})
local B2 = widget.newButton({left = 100,top = 300,id = "button2",label = "Hide",onEvent = ButtonEvent2})

<强> newPanel.lua

function widget.newPanel( options )
    local customOptions = options or {}
    local opt = {}

    opt.location = customOptions.location or "top"

    local default_width, default_height
    if ( opt.location == "top" or opt.location == "bottom" ) then
        default_width = display.contentWidth
        default_height = display.contentHeight * 0.33
    else
        default_width = display.contentWidth * 0.33
        default_height = display.contentHeight
    end

    opt.width = customOptions.width or default_width
    opt.height = customOptions.height or default_height

    opt.speed = customOptions.speed or 500
    opt.inEasing = customOptions.inEasing or easing.linear
    opt.outEasing = customOptions.outEasing or easing.linear

    if ( customOptions.onComplete and type(customOptions.onComplete) == "function" ) then
        opt.listener = customOptions.onComplete
    else 
        opt.listener = nil
    end

    local container = display.newContainer( opt.width, opt.height )

    if ( opt.location == "left" ) then
        container.anchorX = 1.0
        container.x = display.screenOriginX
        container.anchorY = 0.5
        container.y = display.contentCenterY
    elseif ( opt.location == "right" ) then
        container.anchorX = 0.0
        container.x = display.actualContentWidth
        container.anchorY = 0.5
        container.y = display.contentCenterY
    elseif ( opt.location == "top" ) then
        container.anchorX = 0.5
        container.x = display.contentCenterX
        container.anchorY = 1.0
        container.y = display.screenOriginY
    else
        container.anchorX = 0.5
        container.x = display.contentCenterX
        container.anchorY = 0.0
        container.y = display.actualContentHeight
    end

    function container:show()
        local options = {
            time = opt.speed,
            transition = opt.inEasing
        }
        if ( opt.listener ) then
            options.onComplete = opt.listener
            self.completeState = "shown"
        end
        if ( opt.location == "top" ) then
            options.y = display.screenOriginY + opt.height
        elseif ( opt.location == "bottom" ) then
            options.y = display.actualContentHeight - opt.height
        elseif ( opt.location == "left" ) then
            options.x = display.screenOriginX + opt.width
        else
            options.x = display.actualContentWidth - opt.width
        end 
        transition.to( self, options )
    end

    function container:hide()
        local options = {
            time = opt.speed,
            transition = opt.outEasing
        }
        if ( opt.listener ) then
            options.onComplete = opt.listener
            self.completeState = "hidden"
        end
        if ( opt.location == "top" ) then
            options.y = display.screenOriginY
        elseif ( opt.location == "bottom" ) then
            options.y = display.actualContentHeight
        elseif ( opt.location == "left" ) then
            options.x = display.screenOriginX
        else
            options.x = display.actualContentWidth
        end 
        transition.to( self, options )
    end

    return container
end