如何添加按钮以返回主菜单(另一个.lua文件)?

时间:2014-11-04 15:40:22

标签: lua corona composer-php

这个游戏就像杀死蚊子一样。这是1级文件。当玩家点击蜜蜂时,将显示游戏结束。当时间到了,将显示游戏结束。最后将显示杀死的蚊子总数。我对电晕和游戏开发非常陌生。 我的问题是:

  1. 通过"触摸&#34 ;?功能返回主菜单它的代码是什么?
  2. 我正在使用作曲家。所以我尝试了composer.gotoScene(" menu")但这似乎不起作用。错误。
  3. 提前感谢您提供的任何帮助。以下是代码的一部分:

    local composer = require( "composer" )
    local scene = composer.newScene()
    local physics = require("physics")
    local widget = require "widget"
    physics.start()
    rand = math.random( 20 )
    
    local slap_sound = audio.loadSound("Sound/slap2.mp3")
    local ow = audio.loadSound("Sound/ow.mp3")
    local buttonSound = audio.loadSound("Sound/sound2.mp3")
    local back
    
    --local mossie_sound = audio.loadSound("Sound/mossie.mp3")
    local count={total1=0,total=0,touch=0,life=3}
    
    local background = display.newImageRect( "Images/bg.jpg", display.contentWidth, display.contentHeight )
        background.anchorX = 0
        background.anchorY = 0
        background.x, background.y = 0, 0
    
    local total=display.newText("Score : 0",display.contentWidth * 0.5, 20, "Arial", 26)
          total:setTextColor(000000)
    
    local time_remain = 30
    local mossie
    local bee
    local shade
    local gameOverScreen
    local winScreen
    local gameIsActive = false
    
    local countdown=display.newText(time_remain ,display.contentWidth * 0.9, 20, "Arial", 26)
    countdown:setTextColor(000000)
    
    local life = display.newText("Life : 3 " ,display.contentWidth * 0.5, 50, "Arial", 26)
    life:setTextColor(000000)
    
    local pauseBtn = display.newImage("Images/pause.png")
         pauseBtn.x = display.contentWidth * 0.1
         pauseBtn.y = display.contentHeight - 450
    
    local resumeBtn = display.newImage("Images/playb.png") 
        resumeBtn.x = display.contentWidth * 0.1
        resumeBtn.y = display.contentHeight - 450
    
    
         local gameOver = function()
         composer.removeScene("level1")  //scene cannot be removed???
         gameIsActive = false
         physics.pause()
         gameOverScreen = display.newImage("Images/gameover.png",400,300)
         gameOverScreen.x = 160
         gameOverScreen.y = 240
         gameOverScreen.alpha = 0
         transition.to(gameOverScreen,{time=500,alpha=1})
         total.isVisible = true
        total.text="Score : "..count.touch
        total.x = 160
        total.y = 400
            botwall.isVisible = false
            mossie.isVisible = false
            bee.isVisible = false
            life.isVisible = false
            countdown.isVisible = false
            pauseBtn.isVisible = false
            resumeBtn.isVisible = false
    
         end
    
    
    
        local collisionListener=function(self,event)
            if(event.phase=="began")then
                if(event.other.type=="mossie")then
                    audio.play(ow)
                    count.life=count.life-1
                        if(count.life==0) then
                            gameOver()
                        end 
                    event.other:removeSelf()
                    event.other=nil
                else
                    event.other:removeSelf()
                    event.other=nil
                end
    
            end
    
        end
    
    
        local function countDown(e)
            time_remain = time_remain-1
            countdown.text = time_remain
        end
    
        local checkTimer = function()
            if(time_remain == 0) then
            gameOver()
            end
        end
    
        function killIt(e)
            if(e.phase == "ended") then
                gameOver()
            end
        end
    
        --spawn Bee
        local function newBee(event)
    
            bee = display.newImage("Images/lebah.png")
            bee.x = 60 + math.random( 160 )
            bee.y = -100
            bee.type="other"
            physics.addBody( bee, { density=1.4, friction=0.3, bounce=0.2} )
            checkTimer()
    
            bee:addEventListener("touch",killIt)
    
        end
    
        ---whenMossieIsTouched
        function onTouch(mossie)
            audio.play(slap_sound)
            count.touch=count.touch+1
            total.text="Score : "..count.touch
            mossie.target:removeSelf()
            --print("total"..mossietouchcount)
        end
    
        ---spawn Mossie
        local function newMossie(event)    
            --audio.play(mossie_sound)
            total.text="Score : "..count.touch
            life.text="Life : "..count.life
            mossie = display.newImage("Images/biasa.png") 
            mossie.x = 60 + math.random( 160 )
            mossie.y = -100
            mossie.type="mossie"
            mossie:setFillColor(255,0,0)
            physics.addBody( mossie, { density=0.3, friction=0.2, bounce=0.5} )
            mossie.name = "mossie"
            --checkTimer()
            mossie:addEventListener("touch",onTouch)
    
        end 
    
        local bottomWall = function()
            --botwall=display.newRect(0,display.contentHeight,display.contentWidth*2,10)
            botwall=display.newImage("Images/tangan.png")
            botwall.x = 160
            botwall.y = 500
            botwall:setFillColor(22,125,185,255)
            botwall.type="botwall"
            botwall.collision=collisionListener
            physics.addBody(botwall,"static",{ density=100.0, friction=0.0, bounce=0.0} )
            botwall:addEventListener("collision",botwall)
        end
    
        local gameActivate = function()
            gameIsActive = true
        end
    
    
    
        local gameStart = function()
        local gametmr = timer.performWithDelay(1000, countDown, 0)
        local dropMossie = timer.performWithDelay( 1000 , newMossie, -1 )
        local dropBee = timer.performWithDelay( 1800 , newBee, -1)
    
        local pauseGame = function(e)
            if(e.phase=="ended") then
                audio.play(buttonSound)
                physics.pause()
                timer.pause(gametmr)
                pauseBtn.isVisible = false
                resumeBtn.isVisible = true
                return true
            end
        end
    
        local resumeGame = function(e)
            if(e.phase=="ended") then
                audio.play(buttonSound)
                physics.start()
                timer.resume(gametmr)
                pauseBtn.isVisible = true
                resumeBtn.isVisible = false
                return true
            end
        end
    
        pauseBtn:addEventListener("touch", pauseGame)
        resumeBtn:addEventListener("touch", resumeGame)
        resumeBtn.isVisible = false
        bottomWall()
        gameActivate()
    
    
        end
    
        gameStart()
        return scene
    

1 个答案:

答案 0 :(得分:0)

当您尝试使用composer.gotoScene("menu")

时,请确保该场景名为“menu.lua”

首先确保您需要顶部的库

local composer = require( "composer" )
local widget = require( "widget" )

然后添加一个将处理按钮事件的侦听器

local function handleButtonEvent( event )
    if ( "ended" == event.phase ) then
        composer.gotoScene ("menu")
    end
end

然后创建按钮

local myButton = widget.newButton
{
    left = 100,
    top = 200,
    id = "myButton",
    label = "Default",
    onEvent = handleButtonEvent
}

修改 看看你的代码我可以看到你实际上并没有使用作曲家。当然,你可能会包括这些库,但你没有设置它工作所需的任何功能。

我建议你阅读这篇文章:Introducing the Composer API。这将指导您使用作曲家。

至少你应该有以下函数让作曲家工作。

  • 场景:创建()
  • 场景:显示()
  • 场景:隐藏()
  • 场景:删除()

在其中使用local sceneGroup = self.view使用场景的视图。正确插入对象后,您可以“管理”场景和显示对象。