class 高階用法 lua

2021-06-25 13:06:46 字數 1317 閱讀 6195

class() 高階用法

class() 除了定義純 lua 類之外,還可以從 c++ 物件繼承類。

比如需要建立乙個工具欄,並在新增按鈕時自動排列已有的按鈕,那麼我們可以使用如下的**:

-- 從 ccnode 物件派生 ******* 類,該類具有 ccnode 的所有屬性和行為

local ******* = class("*******", function()

return display.newnode() -- 返回乙個 ccnode 物件

end)

-- 建構函式

function *******:ctor()

self.buttons = {} -- 用乙個 table 來記錄所有的按鈕

end-- 新增乙個按鈕,並且自動設定按鈕位置

function *******:addbutton(button)

-- 將按鈕物件加入 table

self.buttons[#self.buttons + 1] = button

-- 新增按鈕物件到 ccnode 中,以便顯示該按鈕

-- 因為 ******* 是從 ccnode 繼承的,所以可以使用 addchild() 方法

self:addchild(button)

-- 按照按鈕數量,調整所有按鈕的位置

local x = 0

for _, button in ipairs(self.buttons) do

button:setposition(x, 0)

-- 依次排列按鈕,每個按鈕之間間隔 10 點

x = x + button:getcontentsize().width + 10

endend

class() 的這種用法讓我們可以在 c++ 物件基礎上任意擴充套件行為。

~既然是繼承,自然就可以覆蓋 c++ 物件的方法:

function *******:setposition(x, y)

-- 由於在 ******* 繼承類中覆蓋了 ccnode 物件的 setposition() 方法

-- 所以我們要用以下形式才能呼叫到 ccnode 原本的 setposition() 方法

getmetatable(self).setposition(self, x, y)

printf("x = %0.2f, y = %0.2f", x, y)

end注意: lua 繼承類覆蓋的方法並不能從 c++ 呼叫到。也就是說通過 c++ **呼叫這個 ccnode 物件的 setposition() 方法時,並不會執行我們在 lua 中定義的 *******:setposition() 方法。

Lua 物件導向(class)

一 class 定義純 lua 類 基類 定義乙個名為 shape 的基礎類 local shape class shape 這是乙個純lua類 ctor 是類的建構函式,在呼叫shape.new 建立shape物件例項時自動呼叫 function shape ctor shapename self...

Lua的類Class實現

在lua的開頭檔案中宣告 module classa package.seeall 後面宣告函式 function test end則在其他lua檔案中只要require進本檔案,即可classa.test 使用。在lua的開頭檔案中宣告 classa 後面宣告函式 function classa....

Lua學習高階篇

之前已經說了很多,我目前的觀點還是那樣,在嵌入式指令碼中,lua是最優秀 最高效的,如果您有不同的觀點,歡迎指正並討論,切勿吐槽。這個系列完全來自於 programming in lua 您可以將其視為本人的讀書筆記。相比而言,如果您已經掌握了lua,但仍然不是非常熟練,請相信這個系列一定會給您的查...