Cocos 2 d-Lauのオブジェクト向け

2376 ワード

Luaにはもともとオブジェクト向けの特性はなく、tolua++はサードパーティ製のパッケージであり、Luaにオブジェクト向けの特性を提供することができ、Luaを使用してc++言語ライブラリを使用したスクリプトファイルを作成することができる.
パッヶージ
Userを定義します.luaファイル
--      ,                  ,      ,      。
local User = class("User")

    --      
    User.id = 1
    User.name = "  "
    User.age = 20
    
     --    , Lua   ,   ctor()        。         ctor()  
     function User:ctor()
         print("User   ")
     end

--                 
    function User:ctor(name)
         User.name = name
         print("          ")
     end

--     User   ,    ;
    function fun()
    end


--    ,       +:
    function User:fun()
        print("  User     ")
    end

function User:setId(id)
 --   self.id  --      
  --  User.id --         
  User.id = id
end

function User:getId()
    return User.id
end

--     
return User

別のLuaファイルで呼び出す
--         ,  classUser    ,      ,  classUser
local classUser = require("app.scenes.User")

function  DingyiFile:ctor()
--           
    local user = classUser.new()
    ---------------------------------------------
          ,    :User   
    ---------------------------------------------

     local user 1= classUser.new()
     print(user.name)
     print(user1.name)
      ---------------------------------------------
          ,  :
    User   
    User   
      
      
    ---------------------------------------------
     
    user.name = "  "
     print(user.name)
     print(user1.name)
     --  :       
end

--     

--     225
user:setId(225)
print(user1:getId())


もしUser.luaファイルのsetIdメソッドとgetIdメソッドを別の方法に置き換えると、上記の出力結果は:1このときuser:getId=225となる.しかし、この方法ではuser.は使用できません.setId方式付与とuser.getIdは値を取ります.そうしないと、エラーが発生します.例えばuser.setIdメソッドでは、パラメータがselfとidを伝達することを示し、自分のメンバー関数を呼び出して使用する.アクセス時にselfは無効で、静止関数を呼び出すことに相当します.
function User:setId(id)
  self.id  = id
end

function User:getId()
    return self.id
end

継承(単一継承)
teacheクラスが定義されている場合は、Userクラスから継承されます.
local User = require("app.scenes.User")
--   
local Teacher = class("Teacher",User)

function Teacher : ctor()
--Lua                  
   self.super:ctor() --         
    print("Teacher    ")
end
return Teach

マルチステート
Luaは弱いポインタ言語であるため,多態特性はない.