2017-01-31 11 views
0

Я присоединился к этому сообществу, потому что это кажется потрясающим, и я новый кодер, поэтому я хотел бы попробовать и улучшить хорошо и быстро, следуя советам такого приятного сообщества. :)Условная ветка в Lua не работает по непонятной причине?

У меня вопрос относительно кодирования в lua - прямо сейчас, я использую Corona SDK и Sublime Text 3, чтобы закодировать мобильный заставку и экран заголовка. Я начинаю с titleScreen = false, так что я могу запустить код для заставки, который сделает его истинным. Однако, когда я заканчиваю запуск кода для экрана заставки и делаю titleScreen = true, условная ветвь для экрана заголовка не работает! Пожалуйста, помогите мне :(Я сделал тонны тестирования, но не могу понять, где моя ошибка лежит

Вот мой код:.

titleScreen = false 
local logo = display.newImage("logo.png", 155, 275) 
logo.alpha = 0 

local function makeMenuTrue() 
    logo:removeSelf() 
    print("menu should be TRUE") 
    print("WHY DOESN'T IT WORK") 
    titleScreen = true 
end 

local function fadeOut() 
    transition.to(logo, {time = 2000, alpha = 0, onComplete = makeMenuTrue}) 
end 

transition.to(logo, {time = 2000, alpha = 1, onComplete = fadeOut}) 

if (titleScreen == true) then 
    print("NOW IT'S TRUE") 
    local mainTheme = audio.loadSound ("mainTheme.wav") 
    audio.play(mainTheme) 

    display.setStatusBar(display.HiddenStatusBar) 
    local background1 = display.newImage("Title.png", 155, 275) 

    local flare = display.newImage("flare2.png", 40, 30) 
    flare.xScale = .5 
    flare.yScale = .5 
    local flare2 = display.newImage("flare2.png", 400, 70) 
    flare2.xScale = .6 
    flare2.yScale = .6 
    local flare3 = display.newImage("flare2.png", 400, 70) 
    flare2.xScale = .4 
    flare2.yScale = .4 

    local function moveFlare1() 
     transition.to(flare, {time=2000, x = math.random(-100, 450), y = math.random(-100, 700), onComplete = moveFlare1}) 
    end 
    local function moveFlare2() 
     transition.to(flare2, {time=2000, x = math.random(-100, 450), y = math.random(-100, 700), onComplete = moveFlare2}) 
    end 
    local function moveFlare3() 
     transition.to(flare3, {time=2000, x = math.random(-100, 450), y = math.random(-100, 700), onComplete = moveFlare3}) 
    end 

    transition.to(flare, {time=2000, x = math.random(-100, 450), y = math.random(-100, 700), onComplete = moveFlare1}) 
    transition.to(flare2, {time=2500, x = math.random(-100, 450), y = math.random(-100, 700), onComplete = moveFlare2}) 
    transition.to(flare3, {time=2000, x = math.random(-100, 450), y = math.random(-100, 700), onComplete = moveFlare3}) 

--[[local textbox = display.newRect(160, 214, 320, 90) 
textbox:setFillColor(.1, .1, .1, .6) 
]] 

    local textbox = display.newImage("MessageBack2.png", 155, 254, 320, 90) 
    textbox.yScale = .7 
    local textline = display.newImage("flare2.png", 0, 228) 
    textline.xScale = 20 
    textline.yScale = .3 
    local textOption = 1 

    local prompt1 = display.newText ("Start Game", 155, 230, "Goudy Old Style", 20) 
    local prompt2 = display.newText ("Continue", 155, 255, "Goudy Old Style", 20) 
    local prompt3 = display.newText ("Exit Game", 155, 280, "Goudy Old Style", 20) 
    prompt1:setFillColor(0,0,0) 

    local function textShrink() 
     transition.to(textline, {time = 150, yScale = .3}) 
    end 

    local function moveTextBox() 
     if (textOption == 1) then 
      textOption = 2 
      transition.to(textline, {time = 200, y = 253, onComplete = textShrink}) 
      prompt2:setFillColor(0,0,0) 
      prompt1:setFillColor(1,1,1) 
     else 
      if (textOption == 2) then 
       textOption = 3 
       transition.to(textline, {time = 200, y = 278, onComplete = textShrink}) 
       prompt3:setFillColor(0,0,0) 
       prompt2:setFillColor(1,1,1) 
      else 
       if (textOption == 3) then 
        textOption = 1 
        transition.to(textline, {time = 200, y = 228, onComplete = textShrink}) 
        prompt1:setFillColor(0,0,0) 
        prompt3:setFillColor(1,1,1) 
       end 
      end 
     end 
    end 

    local function expandText() 
     if (textOption == 1) then 
      print("object 1 has been tapped????") 
     else 
      if (textOption == 2) then 
       print("object 2 has been tapped????") 
      else 
       if (textOption == 3) then 
        print("object 3 has been tapped????") 
       end 
      end 
     end 
    end 

    transition.to(textline, {time = 150, yScale = .5, 0, onComplete = moveTextBox}) 
    textbox:addEventListener("tap", expandText) 
    else 
     print("lmao no it's not true") 
    end 

Любая помощь очень ценится !!

ответ

1

код, который реагирует на titleScreen значение работает именно после того, как вы установите titleScreen ложь. это if заявления не в какой-то отдельной функции, поэтому он вызывается только при загрузке и запустить этот сценарий, когда makeMenuTrue() не называли ни разу.

Но когда/если вы снова загрузите/запустите его, у вас будет безоговорочно выполнено titleScreen = false, поэтому вы не можете иметь titleScreen, сохраняя любую информацию, которая может быть обновлена ​​предыдущим makeMenuTrue.

Разделить его. Сделайте условие titleScreen проверкой отдельной функции, которая вызывается без перезагрузки скрипта. Или, по крайней мере, проверьте, существует ли уже переменная titleScreen до того, как она будет перенаправлена ​​на false при перезагрузке скрипта.

+0

'transition.to()' вызывается при запуске сценария, вызов 'FADEOUT()' по завершении, в свою очередь, называет 'makeMenuTrue()' по завершении. –

+0

будет вызываться 'makeMenuTrue'. Но оператор 'if' не будет вызываться до перезагрузки сценария, и если он будет перезагружен после вызова' fadeout() ', тогда' titleScreen' будет удален в самом начале скрипта. – Vlad

+0

Эй, спасибо! Я назвал «makeMenuTrue» один раз после перехода пары, используя «onComplete», но я понимаю, почему это так. Могу ли я попросить дополнительную спецификацию «когда/если вы снова загружаете/запускаете ее, у вас есть titleScreen = false безоговорочно исполнено, поэтому вы не можете иметь заголовок, который хранит любую информацию, которая может быть обновлена ​​предыдущей частью вызова« makeMenuTrue »? Я не совсем понимаю это - не следует ли обновлять значение, которое было выполнено как ложное, которое вызывает makeMenuTrue? Что мешает этому? Извините, если я этого не понимаю, иногда язык этого форума довольно сложный для меня :) –

0

Вы можете просто использовать функцию (showTitleScreen) вместо переменной (titleScreen). Весь ваш код от if-else заявление Я положил в тело функции.

local logo = display.newImage("logo.png", 155, 275) 
logo.alpha = 0 

local function makeMenuTrue() 
    logo:removeSelf() 
    print("menu should be TRUE") 
    print("WHY DOESN'T IT WORK") 
    showTitleScreen() 
end 

local function fadeOut() 
    transition.to(logo, {time = 2000, alpha = 0, onComplete = makeMenuTrue}) 
end 

transition.to(logo, {time = 2000, alpha = 1, onComplete = fadeOut}) 

local function showTitleScreen() 
    print("NOW IT'S TRUE") 
    local mainTheme = audio.loadSound ("mainTheme.wav") 
    audio.play(mainTheme) 

    display.setStatusBar(display.HiddenStatusBar) 
    local background1 = display.newImage("Title.png", 155, 275) 

    local flare = display.newImage("flare2.png", 40, 30) 
    flare.xScale = .5 
    flare.yScale = .5 
    local flare2 = display.newImage("flare2.png", 400, 70) 
    flare2.xScale = .6 
    flare2.yScale = .6 
    local flare3 = display.newImage("flare2.png", 400, 70) 
    flare2.xScale = .4 
    flare2.yScale = .4 

    local function moveFlare1() 
     transition.to(flare, {time=2000, x = math.random(-100, 450), y = math.random(-100, 700), onComplete = moveFlare1}) 
    end 
    local function moveFlare2() 
     transition.to(flare2, {time=2000, x = math.random(-100, 450), y = math.random(-100, 700), onComplete = moveFlare2}) 
    end 
    local function moveFlare3() 
     transition.to(flare3, {time=2000, x = math.random(-100, 450), y = math.random(-100, 700), onComplete = moveFlare3}) 
    end 

    transition.to(flare, {time=2000, x = math.random(-100, 450), y = math.random(-100, 700), onComplete = moveFlare1}) 
    transition.to(flare2, {time=2500, x = math.random(-100, 450), y = math.random(-100, 700), onComplete = moveFlare2}) 
    transition.to(flare3, {time=2000, x = math.random(-100, 450), y = math.random(-100, 700), onComplete = moveFlare3}) 

--[[local textbox = display.newRect(160, 214, 320, 90) 
textbox:setFillColor(.1, .1, .1, .6) 
]] 

    local textbox = display.newImage("MessageBack2.png", 155, 254, 320, 90) 
    textbox.yScale = .7 
    local textline = display.newImage("flare2.png", 0, 228) 
    textline.xScale = 20 
    textline.yScale = .3 
    local textOption = 1 

    local prompt1 = display.newText ("Start Game", 155, 230, "Goudy Old Style", 20) 
    local prompt2 = display.newText ("Continue", 155, 255, "Goudy Old Style", 20) 
    local prompt3 = display.newText ("Exit Game", 155, 280, "Goudy Old Style", 20) 
    prompt1:setFillColor(0,0,0) 

    local function textShrink() 
     transition.to(textline, {time = 150, yScale = .3}) 
    end 

    local function moveTextBox() 
     if (textOption == 1) then 
      textOption = 2 
      transition.to(textline, {time = 200, y = 253, onComplete = textShrink}) 
      prompt2:setFillColor(0,0,0) 
      prompt1:setFillColor(1,1,1) 
     else 
      if (textOption == 2) then 
       textOption = 3 
       transition.to(textline, {time = 200, y = 278, onComplete = textShrink}) 
       prompt3:setFillColor(0,0,0) 
       prompt2:setFillColor(1,1,1) 
      else 
       if (textOption == 3) then 
        textOption = 1 
        transition.to(textline, {time = 200, y = 228, onComplete = textShrink}) 
        prompt1:setFillColor(0,0,0) 
        prompt3:setFillColor(1,1,1) 
       end 
      end 
     end 
    end 

    local function expandText() 
     if (textOption == 1) then 
      print("object 1 has been tapped????") 
     else 
      if (textOption == 2) then 
       print("object 2 has been tapped????") 
      else 
       if (textOption == 3) then 
        print("object 3 has been tapped????") 
       end 
      end 
     end 
    end 

    transition.to(textline, {time = 150, yScale = .5, 0, onComplete = moveTextBox}) 
    textbox:addEventListener("tap", expandText) 
end