2016-04-11 5 views
0

Мой обновленный код для моего файла game.lua.Corona SDK Game Restart

local composer=require("composer") 

local physics=require("physics") 
local widget=require("widget") 

local scene=composer.newScene() 

physics.setDrawMode("normal") 
--erased system activate check later 
system.activate("multitouch") 

--CHECK THIS _H AND _W 
_H=display.contentHeight 
_W=display.contentWidth 

physics.start() 
physics.setGravity(0,-5) 

trumps=0 

numTrumps=100 

startTime=20 

totalTime=20 

timeLeft=true 

playerReady=false 

Random=math.random 



local function Restart(event) 
    if "began"==event.phase then 

if(timeLeft~=false) then 
    timer.cancel(gameTimer) 

    end 

end 
     if "moved"==event.phase then 

end 
      if "ended"==event.phase then 
      composer.gotoScene("restarttest") 
end 
     end 





local function gameOver(condition) 
    if (condition=="winner") then 
     screenText.text="Adios Trump!" 

     elseif (condition=="notbad") then 
      screenText.text="Barely stopped Trump" 

      elseif (condition=="loser") then 
       screenText.text="Ready for That Wall!" 
      end 
end 




local function removeTrumps(obj) 
    obj:removeSelf() 

    trumps=trumps-1 

    if (timeLeft~=false) then 
     if(trumps==0) then 
      timer.cancel(gameTimer) 
      gameOver("winner") 

     elseif(trumps<=40) then 

      gameOver("notbad") 
     elseif(trumps>=31) then 

      gameOver("loser") 
     end 

    end 
end 


local function countDown(event) 
    if (startTime==totalTime) then 
     playerReady=true 
     screenText.text="Hurry!" 

    end 
    startTime=startTime-1 
    timeText.text="Time: "..startTime 

    if (startTime==0) then 
     timeLeft=false 
    end 

end 
--[[local function spawn(params) 
    local myTrump=display.newImage(params.image, 25, 25) 
    myTrump.myTrumpTable=params.myTrumpTable 
    myTrump.index=#myTrump.myTrumpTable+1 
    myTrump.myName="Donald: ".. myTrump.index 

    if params.hasBody then 
     myTrump.density=.1 
     myTrump.friction=0 
     myTrump.bounce=.9 
     myTrump.radius=9 
     myTrump.bodyType="dynamic" 

     physics.addBody(myTrump,"dynamic",{density=myTrump.density, friction=myTrump.friction, bounce=myTrump.bounce,radius=myTrump.radius}) 
    end 
    myTrump.myTrumpTable[myTrump.index]=myTrump 
    return myTrump 
end 

local spawnTable={} 

for i=1, 100 do 
    local spawns=spawn(
    { 
image="tp.png", 
myTrumpTable=spawnTable, 
hasBody=true, 
bounce=.9, 
radius=9, 
density=.1, 
bodyType="dynamic", 
} 
) 
end 
--]] 
local function startGame() 
    myTrump=display.newImageRect("tp.png",25,25) 
    myTrump.x=Random(50,_W-50) 
    myTrump.y=(_H+10) 
    physics.addBody(myTrump,"dynamic",{density=.1,friction=0,bounce=.9,radius=9}) 


    function myTrump:touch(event) 

    if(timeLeft~=false) then 

     if (playerReady==true) then 
      if(event.phase=="ended") then 
      removeTrumps(self) 
     end 

    end 
end 
end 
     myTrump:addEventListener("touch",myTrump) 

trumps=trumps+1 

if(trumps==numTrumps) then 
    gameTimer=timer.performWithDelay(1000,countDown,totalTime) 
else 

    playerReady=false 
end 

end 


    local gameTimer=timer.performWithDelay(20,startGame,numTrumps) 


function scene:create(event) 

    local screenGroup=display.newGroup() 


    background=display.newImage(screenGroup,"tflag.png") 

    but1=widget.newButton{screenGroup,label="Restart",onEvent=Restart} 
but1.x=_W/2+150 
but1.y=_H-10 

screenText=display.newText(screenGroup,"...Waiting for Trump...",0,0,native.systemFont,16*2) 
screenText.xScale=.5 
screenText.yScale=.5 
screenText.anchorX=(0) 
screenText.anchorY=(0) 
screenText.x=_W/2-210 
screenText.y=_H-20 


    timeText=display.newText(screenGroup,"Time:"..startTime,0,0,native.systemFont,16*2) 
timeText.xScale=.5 
timeText.yScale=.5 
timeText.anchorY=0 
timeText.anchorX=0 
timeText.x=_W/2 
timeText.y=_H-20 

leftWall=display.newRect(screenGroup,483,50,1,1000) 
    leftWall:setFillColor(0,0,200) 

    rightWall=display.newRect(screenGroup,0,0,1,1000) 
    rightWall:setFillColor(0,0,200) 

    ceiling=display.newRect(screenGroup,150,0,1000,1) 
    ceiling:setFillColor(0,0,200) 

physics.addBody(leftWall,"static",{bounce=.1}) 
physics.addBody(rightWall,"static",{bounce=.1}) 
physics.addBody(ceiling,"static",{bounce=.1}) 

end 

function scene:show(event) 
    local screenGroup=display.newGroup() 
if event.phase=="will" then 


    end 
if event.phase=="did" then 

end 

end 


function scene:hide(event) 
    local screenGroup=display.newGroup() 
    if event.phase=="will" then 
    end 
    if event.phase=="did" then 
Runtime:removeEventListener("touch",myTrump) 

end 
end 

function scene:destroy(event) 
    if event.phase=="will" then 
physics.removeBody(leftWall) 
physics.removeBody(rightWall) 
physics.removeBody(ceiling) 
physics.removeBody(myTrump) 
display.remove(myTrump) 
display.remove(timeText) 
display.remove(screenText) 
display.remove(but1) 
display.remove(background) 
display.remove(screenGroup) 


end 
if event.phase=="did" then 
end 

    end 


scene:addEventListener("create",scene) 
scene:addEventListener("show",scene) 
scene:addEventListener("hide",scene) 
scene:addEventListener("destroy",scene) 

return scene 

Теперь это мой код для моего файла рестарта

local composer=require("composer") 
local scene=composer.newScene() 


--background 
function scene:create(event) 


--background=display.newImage(screenGroup,"tflag.png") 


end 

function start(event) 
    if event.phase=="began" then 
     --composer.removeScene("game1") 

end 
    if event.phase=="ended" then 
    --composer.gotoScene("game1") 

end 
end 

function scene:show(event) 

--background:addEventListener("touch",start) 
if event.phase=="will" then 
composer.removeScene("game1") 


else if event.phase=="did" then 

composer.gotoScene("game1") 
end 
end 
end 

function scene:hide(event) 
    if event.phase=="will" then 
end 
if event.phase=="did" then 
    --background:removeEventListener("touch",start) 

end 
    end 

function scene:destroy(event) 


end 


scene:addEventListener("create",scene) 
scene:addEventListener("show",scene) 
scene:addEventListener("hide",scene) 
scene:addEventListener("destroy",scene) 



return scene 

МОЯ Единственная проблема в том, что, когда я перезагружать образы козырей больше не на экране, но все еще есть, но только невидимая вы можно сказать. Поэтому, когда появляются новые изображения после перезапуска игры, они не могут попасть в верхнюю часть экрана, как они предполагают, потому что их останавливают невидимые «козыри» из предыдущей игры.

Моя игра основана на этой игре, но нет воздушных шаров, вместо этого есть фотографии Дональда Трампа. https://www.raywenderlich.com/22064/how-to-make-a-simple-game-with-corona

+0

Спасибо, Брет, но у меня все еще есть проблема. Козыри теперь не идут на вершину, но таймеры работают по назначению. Спасибо вам за это! Моя вторая проблема заключается в том, что кнопка перезапуска работает только один раз. Я изменил строку Physics.start() на начало и установил гравитацию в начале кода. – RoBoTV

+0

Выполняют ли козыри вверх или вообще останавливаются в точке? Кроме того, зачем использовать совершенно другую сцену для перезапуска, если вы не показываете ничего нового? Не можете ли вы просто сделать кнопку перезапуска напрямую с помощью козырей и таймеров? –

+0

Проблема с перезагрузкой может быть вызвана тем, что вы не уничтожаете эту сцену. Вы создаете его снова, но не удаляете текущий. composer: gotoScene() не будет помнить сцену: create(), если она не была уничтожена. –

ответ

2

Я также довольно новичок в использовании композитора, но когда вы вызываете removeScene («game1»), это вызывает сцену: destroy function. В этой функции вам необходимо удалить созданные объекты отображения. Поскольку вы этого не делаете, вполне вероятно, что объекты по-прежнему существуют позади ваших вновь созданных, которые вызывают нечетные проблемы физики. Дайте мне знать, если это вообще поможет.