我有一个创建场景的主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
答案 0 :(得分:0)
您可以随时尝试实施委托:Wikipedia
基本上这意味着你在'Deck'中有一个属性链接回'Scene'。当您创建Deck时,您可以设置类似
的内容Deck.SceneDelegate = self
然后在甲板上你可以打电话
SceneDelegate.wonGame()
答案 1 :(得分:0)
你需要两件事:
要求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()
。如果您希望所有实例都使用相同的回调,则必须在类中而不是实例中定义回调。