2014-11-04 119 views
0

这款游戏就像杀死蚊子一样。这是1级文件。当玩家点击蜜蜂时,会显示游戏结束。当时间到了,游戏结束会显示。杀死的蚊子总数将显示在最后。我对电晕和游戏开发非常陌生。 我的问题是:如何添加一个按钮返回主菜单(另一个.lua文件)?

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

在此先感谢您提供的任何帮助。下面是部分代码:

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 

回答

0

确保一幕被称为“menu.lua”当您尝试使用composer.gotoScene("menu")

首先确保您所需要的库顶部

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。一旦物体被正确插入,您可以“管理”您的场景和其中的显示对象。

+0

首先,非常感谢你的回复。 所以,我现在关心的是我没有想法把代码放在哪里.. 现在,我已经把所有的背景,蚊子,蜜蜂,timetext放在函数create中。我将它们插入到sceneGroup中,我添加了eventListener。 那么,我应该在哪里放置或如何保持产卵的蚊子和蜜蜂? 如何设置倒数计时器? 我应该把所有这些代码放在哪里? – 2014-11-05 03:10:04

+0

您可以将所有代码放入创建中。唯一需要记住的是将显示对象添加到sceneGroup/Scene视图。 – 2014-11-05 13:37:01

相关问题