2013-07-30 4 views
0

Я пытаюсь изменить сцены с режиссером, скользя пальцем по экрану. Однако он работает неправильно. Сцены не приходят в порядок. Можете ли вы, пожалуйста, изучить мой код и сказать мне, если я что-то пропущу? Я попытался напечатать currentNumberNo для отладки и выяснил, что он меняет дважды, когда я нажимаю мой курсор один раз. В чем причина?Изменение сцены, скользя пальцем по экрану в Corona

main.lua

local director = require "director" 
--GLOBALS-- 
W = display.contentWidth 
H = display.contentHeight 
room={"kitchen", "bedroom", "bathroom"} 
currentRoomNo = 1 

director:changeScene("kitchen") 

kitchen.lua:

module(..., package.seeall) 
local director = require "director" 

function new() 

group = display.newGroup() 

local bg = display.newRect(0,0,W,H); bg:setFillColor(255,250,30) 
group:insert(bg) 

---[[ 
local function slide(event) 
if event.phase == "ended" or event.phase == "cancelled" then 
    local dif = event.xStart-event.x 
    if dif> 30 then 
     if currentRoomNo==#room then 
      currentRoomNo = 1 
     else 
      currentRoomNo = currentRoomNo + 1 
     end 
    director:changeScene(room[currentRoomNo]) 
    elseif dif< -30 then 
     if currentRoomNo==1 then 
      currentRoomNo = #room 
     else 
      currentRoomNo = currentRoomNo - 1 
     end 
    director:changeScene(room[currentRoomNo]) 
    end 
end 
return true 
end 

Runtime:addEventListener("touch", slide) 
--]] 
return group 

end 

ответ

2

Попробуйте это:

module(..., package.seeall) 
local director = require "director" 

function new() 
local isChanging = false 
group = display.newGroup() 

local bg = display.newRect(0,0,W,H); bg:setFillColor(255,250,30) 
group:insert(bg) 

---[[ 
local function slide(event) 
if (event.phase == "ended" or event.phase == "cancelled") and isChanging == false then 
    local dif = event.xStart-event.x 
    if dif> 30 then 
     if currentRoomNo==#room then 
      currentRoomNo = 1 
     else 
      currentRoomNo = currentRoomNo + 1 
     end 
    director:changeScene(room[currentRoomNo]) 
    isChanging = true 
    elseif dif< -30 then 
     if currentRoomNo==1 then 
      currentRoomNo = #room 
     else 
      currentRoomNo = currentRoomNo - 1 
     end 
    director:changeScene(room[currentRoomNo]) 
    isChanging = true 
    end 
end 
return true 
end 

Runtime:addEventListener("touch", slide) 
--]] 
return group 

end 
+0

Я попытался это, но теперь это сброс currentRoomNo в новой сцене, так это потому что currentRoomNo - 1 в main.lua, а во второй комнате (currentRoomNo должно быть 2, но 1), поэтому он увеличивается до 2, что само по себе снова. Не можем ли мы изменить currentRoomNo в main.lua? Разве это не глобально? –

+1

О, я вижу сейчас. Сложно изменить переменную, которая создается в main.lua. Когда вы пытаетесь изменить его в другом модуле, корона ведет себя так же, как вы пытаетесь создать новое значение с тем же именем. Таким образом, вы создаете новую переменную в этом модуле. Существует простой способ исправить это: вы должны создать свою переменную в основном файле lua, а также создать функцию, которая изменяет значение этой переменной, чтобы вы могли достичь того, чего хотите. –

+0

Спасибо, Doğancan. знак равно –

Смежные вопросы