这个游戏就像杀死蚊子一样。这是1级文件。当玩家点击蜜蜂时,将显示游戏结束。当时间到了,将显示游戏结束。最后将显示杀死的蚊子总数。我对电晕和游戏开发非常陌生。 我的问题是:
提前感谢您提供的任何帮助。以下是代码的一部分:
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 :(得分:0)
当您尝试使用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
使用场景的视图。正确插入对象后,您可以“管理”场景和显示对象。