Function 从对象实例中调用Lua函数

Function 从对象实例中调用Lua函数,function,class,object,lua,coronasdk,Function,Class,Object,Lua,Coronasdk,我有一个主lua文件,它创建了一个场景,在场景函数中,它创建了一个甲板对象和一个名为wonGame()的函数,用于检查游戏何时获胜 local composer = require("composer") function scene:create(e) require "Deck" myDeck = Deck:new() function wonGame() print("You have won the game") end end

我有一个主lua文件,它创建了一个场景,在场景函数中,它创建了一个甲板对象和一个名为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

您始终可以尝试并实现委托:

基本上,这意味着您在“Deck”中有一个链接回“Scene”的属性。当你创建你的牌组时,你会设置如下

Deck.SceneDelegate = self 
然后在甲板上你可以打电话

SceneDelegate.wonGame()
你需要两件事:

  • 数据组必须设计为调用用户定义的回调
  • 您必须将回调注册到Deck实例
  • 要求1意味着在代码组中的某个地方,您可以调用代码
    self.onWonGame
    。我不知道甲板是如何定义的,但它可能是这样的:

    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
    中,在表上循环并调用每个回调。此外,在上面的示例中,每个实例都必须调用它。如果希望所有实例使用相同的回调,则必须在类中而不是在实例中定义回调。

    您总是忘记了
    self
    -参数。另外,
    wonGame
    难道不应该成为
    Deck
    的一员吗?想到它是如何设计的,我的头都痛了。什么是场景和甲板?正在玩的游戏是什么?他们之间有什么关系?到目前为止,调用create函数之后,wonGame函数就不在范围之内了。不过我相信他所说的是正确的。wonGame不应在牌组中执行。我认为这副牌可能只是一副牌的集合,对它所处的游戏一无所知。