Function 从对象实例中调用Lua函数
我有一个主lua文件,它创建了一个场景,在场景函数中,它创建了一个甲板对象和一个名为wonGame()的函数,用于检查游戏何时获胜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
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()
你需要两件事:
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不应在牌组中执行。我认为这副牌可能只是一副牌的集合,对它所处的游戏一无所知。