如何在corona SDK中将一个在场景中创建的函数用于其他场景中?

我没有 Corona SDK 的使用经验,请帮忙。

我在场景中制作了一个得分功能,选择正确答案时会加上 +1,选择错误答案会减去 -1

问题: 我如何在不重新启动得分的情况下在我创建的其他场景中使用/调用此功能?

-------------------得分------------------------
local score = 0

local scoreTxt = display.newText("0", 0, 0, "Helvetica", 40)
scoreTxt:setReferencePoint(display.TopLeftReferencePoint)
scoreTxt.x = display.screenOriginX + 700
scoreTxt.y = display.screenOriginY + 37
scoreTxt:setTextColor(2, 2, 2)
------------------------------------------------------
---------------------加分 10 分-----------------------------

function updateScore()
    score = score + 1
    scoreTxt.text = string.format(" %d", score)
end

local scoretimer = timer.performWithDelay(1, updateScore, 1)
---------------------------------------
---------------------减分 1 分-----------------------------

function minusScore()
    score = score - 1
    scoreTxt.text = string.format(" %d", score)
end

local scoretimer = timer.performWithDelay(1, minusScore, 1)
点赞
用户640093
用户640093

我认为最快的实现方式是创建一个全局变量来存储分数,如_G.score = 0。

然后,在你的updateScore()函数和minusScore()函数中,你需要设置_G.score为你想要的值。就像这样:

    function updateScore()
      score = score + 1
     _G.score = score --将分数设置为全局变量
    scoreTxt.text = string.format(" %d", score)
 end

    local scoretimer = timer.performWithDelay(1, updateScore, 1)
   ---------------------------------------
    ---------------------score minus 1-----------------------------

   function minusScore()
        score = score - 1
        _G.score = score --将分数设置为全局变量
        scoreTxt.text = string.format(" %d", score)
    end

现在你可以从任何地方调用_G.score以获取当前分数。我建议你使用一些分数模块,如GGData (https://github.com/GlitchGames/GGScore)。

以上方法可能不是最好的解决方案,但对于一个快速的解决方法可能会有效。

2014-05-23 22:07:55
用户869951
用户869951

你可以将代码移动到一个从每个场景中要求的单独的文件中。然而,这会有一些工作要做才能让它工作:

1.如果所有场景共享分数文本框(即框在背景舞台对象中),那么你需要修改你的代码,使你有一个 setTextObject(displayObject) 允许主场景创建文本对象,并将它设置在你所要求的模块中,这样场景就不必担心它;你需要一种方法来决定何时调用 timer.performWithDelay,例如通过 increaseScoreDelayed()decreaseScoreDelayed()

2.如果每个场景都有自己的分数文本框来显示分数,那么每个场景都需要在 enterScene 事件中调用 setTextObject(displayObject) 来告诉你的模块要把分数放到什么显示对象中。

无论哪种方式,本地得分应该在共享模块中,这样得分就在整个应用程序中共享(所有模块使用相同的得分实例)。

2014-05-23 22:15:02