簡體   English   中英

從對象實例中調用Lua函數

[英]Calling a Lua function from within an object instance

我有一個Main 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

您總是可以嘗試實現委托: Wikipedia

基本上,這意味着您在'Deck'中擁有一個屬性,該屬性鏈接回'Scene'。 創建Deck時,您需要設置以下內容

Deck.SceneDelegate = self 

然后在Deck,您可以致電

SceneDelegate.wonGame()

您需要兩件事:

  1. 必須將Deck設計為調用用戶定義的回調
  2. 您必須將回調注冊到Deck實例

要求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() 如果希望所有實例都使用相同的回調,則必須在類而不是實例中定義回調。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM