Проблемы сцен и групп с использованием Lua и Corona SDK - PullRequest
0 голосов
/ 17 июня 2011

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

Вот мой файл титров:

module(..., package.seeall)

local assetPath = "assets/"

local mainGroup = display.newGroup()

function new()


    local ui = require("ui")
    local titleScreen = display.newImageRect(assetPath .. "mainMenu.png", display.contentWidth, display.contentHeight)
    titleScreen.x = display.contentWidth / 2
    titleScreen.y = display.contentHeight / 2
    mainGroup:insert(titleScreen)

        local onPlayTouch = function( event )
            if event.phase == "release" then                                        
            director:changeScene("gameScreen")
            end
        end

        local playButton = ui.newButton{
        defaultSrc = assetPath .. "playnowbtn.png",
        defaultX = 222,
        defaultY = 62,
        overSrc = assetPath .. "playnowbtn-over.png",
        overX = 222,
        overY = 62,
        onEvent = onPlayTouch
        }

        playButton.x = display.contentWidth / 2 
        playButton.y = 50;
        mainGroup:insert( playButton )

        local onOptionTouch = function( event )
            if event.phase == "release" then                                        
            director:changeScene("optionsScreen")
            end
        end

        local optionButton = ui.newButton{
        defaultSrc = assetPath .. "playnowbtn.png",
        defaultX = 222,
        defaultY = 62,
        overSrc = assetPath .. "playnowbtn-over.png",
        overX = 222,
        overY = 62,
        onEvent = onOptionTouch
        }

        optionButton.x = display.contentWidth / 2 
        optionButton.y = 190;
        mainGroup:insert( optionButton )

    return mainGroup
end

МойФайл опций выглядит следующим образом:

module(..., package.seeall)

function new()

local assetPath = "assets/"

local localGroup = display.newGroup()

local background = display.newImage (assetPath .."optionsScreen.png")
localGroup:insert(background)

    local onBackTouch = function( event )
        if event.phase == "release" then                                        
        director:changeScene("titleScreen")
        end
    end

    local backButton = ui.newButton{
    defaultSrc = assetPath .. "playnowbtn.png",
    defaultX = 222,
    defaultY = 62,
    overSrc = assetPath .. "playnowbtn-over.png",
    overX = 222,
    overY = 62,
    onEvent = onBackTouch
    }

    backButton.x = display.contentWidth / 2 
    backButton.y = display.contentHeight / 2
    localGroup:insert(backbutton)

    return localGroup
end

Теперь кнопка отображается на сцене опций и реагирует на прикосновения, но не перенаправляет обратно на экран титров.

Мне кажется, я запуталасьс группами и только назначением изображений для сцен, а не для всей игры?

Кто-нибудь может мне помочь, спасибо.

РЕДАКТИРОВАТЬ:

Я также получаю эти ошибки во время выполнения, когданажатие кнопок.

Ошибка времени выполнения /Users/Lewis/Desktop/proj/optionsScreen.lua:30: ОШИБКА: ожидается таблица.Если это вызов функции, возможно, вы использовали '.'вместо ':' трассировки стека: [C]:?[C]: в функции 'insert' /Users/Lewis/Desktop/proj/optionsScreen.lua:30: в функции 'new' /Users/Lewis/Desktop/proj/director.lua:118: в функции 'loadScene' /Users / Lewis / Desktop / proj / Director.lua: 415: в функции 'changeScene' /Users/Lewis/Desktop/proj/titlescreen.lua:67: в функции 'onEvent' / Users / Lewis / Desktop / proj / ui.lua: 94: в функции?: в функции Ошибка выполнения /Users/Lewis/Desktop/proj/director.lua:151: попытка вызвать поле 'unloadMe' (нулевое значение) трассировки стека: [C]: в функции 'unloadMe'/Users/Lewis/Desktop/proj/director.lua:151: в функции' _listener '?: В функции?: В функции

Ответы [ 2 ]

0 голосов
/ 26 июля 2011

В вашей распечатке с ошибкой она запрашивает функцию unload me.

Попробуйте добавить это в свой код (над оператором return) и посмотрите, будет ли это иметь значение:

function unloadMe()
    print( "test" )
end

И посмотри, избавится ли это от ошибки.Другой вариант - отказаться от ui.lua и использовать вместо него функцию widget.newButton () новой библиотеки виджетов.Вот страница документа для этого (синтаксис почти такой же, как у вас уже есть, поэтому не нужно много изменений):

http://developer.anscamobile.com/reference/index/widgetnewbutton

0 голосов
/ 20 июня 2011

Я не использую Director.lua, поэтому я не уверен на 100%, но в вашем файле options.lua вы помещаете следующие две строки в функцию new ():

local assetPath = "assets/"
local localGroup = display.newGroup()

Однако в вашем titlecreen.lua эти строки находятся выше функции new (), и я думаю, что так и должно быть.

В общем случае вы должны делать свои отступы согласованными, чтобы было легко заметить, какой код находится внутри каких кодовых блоков.

...