2016-10-18 5 views
1

나는 시작 화면이있는 게임을 만들고 시작 버튼을 클릭하면 나를 처음 단계로 데려다 줄 것입니다. 몇 가지 일이 발생하면 두 번째 단계로 이동합니다.LUA : 장면이 만들어지지 않습니다. 뭐가 잘못 되었 니?

그러나 문제가 발생하여 해결책을 찾지 못하는 것 같습니다. 시작 버튼을 클릭하면 뭔가를 인쇄하기 때문에 작성 기능이 멈춘 것 같습니다. 나는 당신이 생성 함수에 아무것도 넣지 않고 모든 것을 SHOW FUNCTION에 넣을 필요가 없다고 들었다. 나는 오도했다?

START 장면

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

local options = {effect = "fade", time = 800} 
local startBtn; 

local function start(event) 
    -- load first scene 
    composer.gotoScene("level1", options); 
    startBtn:removeSelf(); 
    print("Start Game") 
end 

startBtn = widget.newButton(
    { 
    left = 75, 
    top = 100, 
    id = "startBtn", 
    label = "Start", 
    onEvent = start 
    } 
) 

나는 START 버튼을 클릭하면이 난 문제로 실행 해요 그 다음에 하고있는 첫 번째 수준에 저를해야한다. 그것이 올바른 이름으로 추가되지 않았기 때문에

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

function scene:create(event) 

    local sceneGroup = self.view; 

end 

function scene:show(event) 

    local sceneGroup = self.view 
    local phase = event.phase 
    local params = event.params; 
    print(params); 

    if (phase == "will") then 
     print("Will") 
    elseif (phase == "did") then 
     print("Did") 
     local bg = display.newImage ("bg.png", 
     display.contentCenterX, display.contentCenterY); 


     ------- ALEX KIDD --------------------------------- 
     local options = 
     { 
      frames = { 
       { x = 1, y = 2, width = 16, height = 25}, --frame 1  
       { x = 18, y = 2, width = 16, height = 25}, --frame 2   
       { x = 35, y = 2, width = 16, height = 25}, --frame 3   
       { x = 52, y = 2, width = 16, height = 25}, --frame 4 
       { x = 1, y = 54, width = 16, height = 24}, --ready1 
       { x = 19, y = 54, width = 16, height = 24}, --ready2 
       { x = 37, y = 54, width = 29, height = 24}, -- rock 
       { x = 67, y = 54, width = 33, height = 24}, -- scissor 
       { x = 101, y = 54, width = 33, height = 24}, -- paper  
      } 
     }; 
     local sheet = graphics.newImageSheet("kidd.png", options); 


     -- Create animation sequence for animation 
     local seqData = { 
      {name = "normal", start=1 , count = 4, time = 800}, 
      {name = "faster", frames={1,2,3,4}, time = 400}, 
      {name = "shake", frames={5,6}, time = 500}, 
      {name = "rock", frames={7}}, 
      {name = "paper", frames={9}}, 
      {name = "scissor", frames={8}}, 

     } 
     local alex = display.newSprite (sheet, seqData); 
     alex.x = display.contentCenterX-100; 
     alex.y = display.contentCenterY+83; 

     alex.anchorX = 1; 
     alex.anchorY = 1; 



     ---------- JANKEN --------------------------------- 
     local jankenOpt = 
     { 
      frames = { 
       {x= 154, y= 13, width= 39, height= 48 }, -- shake1 
       {x= 195, y= 13, width= 39, height= 48 }, -- shake2 
       {x= 236, y= 13, width= 32, height= 48 }, -- set 
       {x= 270, y= 13, width= 16, height= 48 }, --r/p/s 
       {x= 287, y= 13, width= 16, height= 48 }, --r/p/s 
       {x= 305, y= 13, width= 15, height= 48 }, --r/p/s 
       {x= 69, y= 13, width= 41, height= 48 }, --flap1 
       {x= 110, y= 13, width= 40, height= 48 }, --flap2 
      } 
     }; 
     local jankenSheet = graphics.newImageSheet("chars.png", jankenOpt); 

     -- Create animation sequence janken 
     local seqDataJanken = { 
      {name = "flap", frames={7,8}, time = 500}, 
      {name = "shake", frames={1,2}, time = 500},  
      {name = "set", frames={3}, time = 10, loopCount=1},   
     } 

     local janken = display.newSprite (jankenSheet, seqDataJanken); 

     janken.x = display.contentCenterX+100; 
     janken.y = display.contentCenterY+83; 

     janken.anchorX = 1; 
     janken.anchorY = 1; 


     -------------- button setup 
     local btnOpt = 
     { 
      frames = { 
       { x = 3, y = 2, width=70, height = 22}, --frame 1  
       { x = 78, y = 2, width=70, height = 22}, --frame 2   
      } 
     }; 

     local buttonSheet = graphics.newImageSheet("button.png", btnOpt); 

     local function foo (wow) 
      alex:play();   
      janken:play(); 
     end 

     local function bar (wow) 
      alex:pause();  
      janken:pause();  
      --alex:setFrame(2);  --keep it at this frame 

      -- NEXT: generate more buttons 
     end 

     -- Function to handle button event 
     local function go(event) 
      -- event.target is the button widget 
      print (event.phase, event.target.id) 

      transition.to(alex, {time=2000, x=170, onStart = foo, onComplete = bar}) 
     end 

     local btnGo = widget.newButton(
      { 
       x = 200, 
       y = 20,  
       id = "btnGo", 
       label = "Go!", 
       labelColor = { default={ 0, 0, 0 }, over={ 0, 0, 0 } },  
       sheet = buttonSheet, 
       defaultFrame = 1, 
       overFrame = 2, 
       onPress = go, 
      } 
     ); 

     -------------- play buttons 

     local function shoot (buttonID) 

      local randomHand = math.random(4,6); 
      -- position Janken and draw his hands 
      janken:setSequence("set"); 
      hand = display.newImage (jankenSheet, randomHand, display.contentCenterX+61, display.contentCenterY+60); 

      if (buttonID == "btnRock") then 
       alex:setSequence("rock"); -- just show rock for now 
      elseif (buttonID == "btnScissor") then 
       alex:setSequence("scissor"); -- just show rock for now 
      else 
       alex:setSequence("paper"); -- just show rock for now 
      end 
     end 


     local function play (event) 
      if (event.phase == "ended") then 
       alex:setSequence ("shake"); 
       alex:play(); 

       janken:setSequence("shake"); 
       janken:play(); 


       local t = timer.performWithDelay (1500, function() shoot(event.target.id) end, 1); 


       print (event.target.id); -- which button was it? 
      end 
     end 


     local btnRock = widget.newButton(
      { 
       x = 80, 
       y = 20,  
       id = "btnRock", 
       label = "Rock", 
       labelColor = { default={ 0, 0, 0 }, over={ 0, 0, 0 } },  
       sheet = buttonSheet, 
       defaultFrame = 1, 
       overFrame = 2, 
       onEvent = play, 
      } 
     ); 

     local btnPaper = widget.newButton(
      { 
       x = 80, 
       y = 50,  
       id = "btnPaper", 
       label = "Paper", 
       labelColor = { default={ 0, 0, 0 }, over={ 0, 0, 0 } },  
       sheet = buttonSheet, 
       defaultFrame = 1, 
       overFrame = 2, 
       onEvent = play, 
      } 
     ); 

     local btnScissor = widget.newButton(
      { 
       x = 80, 
       y = 80,  
       id = "btnScissor", 
       label = "Scissor", 
       labelColor = { default={ 0, 0, 0 }, over={ 0, 0, 0 } },  
       sheet = buttonSheet, 
       defaultFrame = 1, 
       overFrame = 2, 
       onEvent = play, 
      } 
     ); 

     local scoreAlex = display.newText ({text="Alex: 0", x=230, y=60, fontSize=20}); 

     scoreAlex:setFillColor (0,0,0); 
     scoreAlex.anchorX = 1; 

    end 

end 

function scene:hide(event) 
    local sceneGroup = self.view 

    local phase = event.phase 

    if (phase == "will") then 
     transition.cancel(enemy); 
    elseif (phase == "did") then 

    end 

end 


scene:addEventListener("create", scene) 
scene:addEventListener("enter", scene) 
scene:addEventListener("hide", scene) 

return scene 
+0

당신이 당신의 기능에 고착 된 후에 인쇄되는 것이 무엇인지 아는 것이 유용하다고 생각하지 않습니까? – Piglet

답변

1

글쎄, 당신은, scene:addEventListener("show", scene)해야 리스너 scene:addEventListener("enter", scene) (변경 보여 입력)

귀하의 리스너가도 발사되지 않는 추가됩니다.

작곡자는 다음 이벤트를 사용합니다 : create, destroy, show, hide.