从对象实例中调用Lua函数

时间:2014-10-08 14:05:35

标签: function class object lua corona

我有一个创建场景的主lua文件,在场景功能中它创建了一个Deck对象和一个名为wonGame()的函数,用于检查游戏何时获胜。

local composer = require("composer")
function scene:create(e)
     require "Deck"
     myDeck = Deck:new()

     function wonGame()
         print("You have won the game")
     end
end 

我的问题 - 如何在Deck类文件中调用wonGame()函数?例如,假设我在Deck类中有一个名为checkCondition的函数

function checkCondition(e) 
    if(somethingTrue)
         wonGame() --this should be the function in Main file
    end
end

2 个答案:

答案 0 :(得分:0)

您可以随时尝试实施委托:Wikipedia

基本上这意味着你在'Deck'中有一个属性链接回'Scene'。当您创建Deck时,您可以设置类似

的内容
Deck.SceneDelegate = self 

然后在甲板上你可以打电话

SceneDelegate.wonGame()

答案 1 :(得分:0)

你需要两件事:

  1. Deck必须设计为调用用户定义的回调
  2. 您必须将回调注册到Deck实例
  3. 要求1表示在Deck代码中的某处,您有代码可以调用self.onWonGame。我不知道如何定义Deck,但它可能是这样的:

    function Deck:doSomething()
        ...
        -- if some condition is verified, and the onWonGame callback has been defined, call it: 
        if self.someCondition and self.onWonGame then 
             self.onWonGame()  
        end
        ...
    end
    

    要求2表示您需要数据成员或方法来设置回调。示例:

    function Deck:setWonGameCallback(callback)
        self.onWonGame = callback
    end
    

    以上示例仅允许为Deck实例定义一个回调。如果你想要多个回调,你需要self.onWonGame作为回调表,然后在doSomething中你将遍历表并调用每个回调。此外,在上面的示例中,每个实例都必须调用setWonGameCallback()。如果您希望所有实例都使用相同的回调,则必须在类中而不是实例中定义回调。