Cocos2d-Lua的面向对象

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是一种弱指针语言,所以没有多态特性。

你可能感兴趣的:(Cocos2d-Lua的面向对象)