【问题标题】:How do i add a button to back to Main Menu (another .lua file)?如何添加一个按钮返回主菜单(另一个 .lua 文件)?
【发布时间】:2014-11-05 22:07:02
【问题描述】:

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

  1. 在哪里设置通过“触摸”返回主菜单的功能?它的代码是什么?
  2. 我正在使用作曲家。所以我尝试了 composer.gotoScene("menu") 但这似乎不起作用。错误。

提前感谢您提供的任何帮助。以下是部分代码:

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

【问题讨论】:

    标签: lua coronasdk composer-php


    【解决方案1】:

    当您尝试使用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 使用场景视图。一旦对象被正确插入其中,您就可以“管理”您的场景和其中的显示对象。

    【讨论】:

    • 首先,非常感谢您的回复。所以,我现在担心的是我对将代码放在哪里一无所知。现在,我已经在函数 create 中放入了所有背景、蚊子、蜜蜂、时间文本。我将它们插入到场景组中,我添加了 eventListener。那么,我应该放在哪里或如何让蚊子和蜜蜂不断产卵?如何设置倒计时?我应该把所有这些代码放在哪里?
    • 你可以把所有的代码都放在create里面。唯一需要记住的是将显示对象添加到场景组/场景视图。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-07-05
    • 1970-01-01
    • 1970-01-01
    • 2016-12-07
    • 2020-08-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多