Cocos2d-x 脚本语言Lua中的面向对象
在Lua中,并没有面向对象的概念存在,没有类的定义和子类的定义。但相同在Lua中能够利用面向对象的思想来实现面向对象的类继承。
--Lua中的面向对象
--[[
复制表方式面向对象
參数为一张表。通过遍历这张表取值,赋给一张空表,最后返回新建的表。来达到克隆表
]]
function clone(tab)
local ins = {}
for key, var in pairs(tab) do
ins[key] = var
end
return ins
end --[[
复制表
第一參数是目标表,第二个參数是须要复制的表
通过遍历tab来取值将它赋值到目标表中
]]
function copy(dist,tab)
for key, var in pairs(tab) do
dist[key] = var
end
end -- 定义一张空表,相当于一个类
People ={} --function People.sayHi()
-- print("People say hi")
--end -- 定义类中的方法sayHi,传入一个self參数
People.sayHi = function (self)
print("People say hi:"..self.name)
end -- 定义一个new方法,传进一个name參数,通过克隆People这张表来生成一个对象
-- 相当于类其中的一个构造方法
People.new = function (name)
local self = clone(People)
self.name = name return self
end --local p = clone(People)
--p.sayHi()
--生成一个新的对象
local p = People.new("ZhangSan")
--p.sayHi(p)
--p:sayHi() --定义一张空表,也代表一个类
Man = {}
--Man中的构造方法。实现Lua中类的继承
Man.new = function (name)
local self = People.new(name)
--附加Man中全部的键值对到People中的实例中去
copy(self,Man)
return self
end Man.sayHello = function ()
print("Man say hello")
end --重写父类People中的sayHi方法
Man.sayHi = function (self)
print("Man sayHi "..self.name)
end --创建Man的一个实例
local m = Man.new("Lisi")
m:sayHi()
以上代码已经有具体的凝视。读者须要细致阅读这里所给出的样例。
--以函数闭包的形式实现面向对象 --定义一个方法,函数闭包实现一个类的概念
function People(name)
local self = {}
--初始化方法,私有的
local function init()
self.name = name
end self.sayHi = function ()
print("Hello "..self.name)
end --调用初始化
init()
return self
end --实例化一个对象
local p = People("ZhangSan")
p:sayHi() --函数闭包的形式实现类继承
function Man(name)
local self = People(name) -- local function init()
--
-- end self.sayHello = function ()
print("Hi "..self.name)
end return self
end local m = Man("Lisi")
--m:sayHello()
m:sayHi()
以上两种方式均可实现面向对象。目測另外一种方法更为简洁一些,具体使用依照个人的喜好来做。
Cocos2d-x 脚本语言Lua中的面向对象的更多相关文章
- lua中的面向对象编程
简单说说Lua中的面向对象 Lua中的table就是一种对象,看以下一段简单的代码: 上述代码会输出tb1 ~= tb2.说明两个具有相同值得对象是两个不同的对象,同时在Lua中table是引用类型的 ...
- Cocos2d-x 脚本语言Lua介绍
Cocos2d-x 脚本语言Lua介绍 本篇博客记录Lua学习.学习来自eoe论坛,Lua语言开发Cocos2d-x游戏入门视频教程,猛戳下面地址: http://www.eoeandroid.com ...
- 【转载】【游戏开发】在Lua中实现面向对象特性——模拟类、继承、多态
[游戏开发]在Lua中实现面向对象特性——模拟类.继承.多态 阅读目录 一.简介 二.前提知识 三.Lua中实现类.继承.多态 四.总结 回到顶部 一.简介 Lua是一门非常强大.非常灵活的脚本语 ...
- Lua中的面向对象编程详解
简单说说Lua中的面向对象 Lua中的table就是一种对象,看以下一段简单的代码: 复制代码代码如下: local tb1 = {a = 1, b = 2}local tb2 = {a = 1, b ...
- Cocos2d-x 脚本语言Lua使用
Cocos2d-x 脚本语言Lua使用 前面几篇博客已经把Lua的相关基础知识介绍了.本篇博客就来介绍一下,怎样在Cocos2d-x项目中使用Lua这门脚本语言进行开发.因为笔者使用的时Mac系统.所 ...
- Lua和C++交互 学习记录之九:在Lua中以面向对象的方式使用C++注册的类
主要内容转载自:子龙山人博客(强烈建议去子龙山人博客完全学习一遍) 部分内容查阅自:<Lua 5.3 参考手册>中文版 译者 云风 制作 Kavcc vs2013+lua-5.3.3 在 ...
- Cocos2d-x 脚本语言Lua基本数据结构-表(table)
Cocos2d-x 脚本语言Lua基本数据结构-表(table) table是Lua中唯一的数据结构.其它语言所提供的数据结构,如:arrays.records.lists.queues.sets等. ...
- Cocos2d-x 脚本语言Lua基本语法
Cocos2d-x 脚本语言Lua基本语法 前面一篇博客对Lua这门小巧的语言进行了简单的介绍.本篇博客来给大家略微讲一下Lua的语法.不会长篇累牍得把Lua的全部语法都讲一遍,这里通过下面几点来讲L ...
- 【游戏开发】在Lua中实现面向对象特性——模拟类、继承、多态
一.简介 Lua是一门非常强大.非常灵活的脚本语言,自它从发明以来,无数的游戏使用了Lua作为开发语言.但是作为一款脚本语言,Lua也有着自己的不足,那就是它本身并没有提供面向对象的特性,而游戏开发是 ...
随机推荐
- 混淆器:java程序保护如何知识产权,特别提供一个java 开发的java 源代码级的混淆器
java程序保护如何知识产权,特别提供一个java 开发的java 源代码级的混淆器 下载地址:http://yunpan.cn/QXhEcGNYLgwTD 运行方式:java -jar Encryp ...
- django url调度
Django的url配置相同遵循着DRY(dont repeat yourself)的规则.下面都是官方文档的样例: 首先介绍的是Django怎样处理http的请求: 1.在setting里定义ROO ...
- javascripte (三) 改变html图像
<script> function changeImage(){ element=document.getElementById("myimage") if (elem ...
- 学习android内核 -- 内存管理相关
Android内存管理: 1.当应用程序关闭以后,后台对应的进程并没有真正的退出(处于休眠状态,一般不占用系统CPU的资源),这是为了下次再启动的时候能快速启动. 2.当系统内存不够时,AmS会主动根 ...
- 使用AjaxFileUpload.js实现文件异步上�
ajax是无法提交文件的,所以在上传图片并预览的时候,我们常常使用Ifame的方法实现看似异步的效果.可是这样总不是非常方便的,AjaxFilleUpload.js对上面的方法进行了一个包装,使得我们 ...
- SVN无法修改以前提交日志的办法
一直用SVN作为代码备份,但是今天偶然发现SVN上不能修改意见提交的代码,于是乎开始谷歌了,最后发现只需要在该工程下的hooks目录下放入pre-revprop-change.bat文件即可. pre ...
- How to use STA(sql tuning advisor)
一.手工生成Sql tuning advisor 1.SQL text format: DECLARE my_task_name VARCHAR2(30); my_sqltext CLO ...
- 正确理解HTML,XHTML页面的头部doctype定义
摘自http://www.west263.com/info/html/wangyezhizuo/css/20080225/42390.html 当我们制作页面的时候,总会在它的源代码头部看到一串声明, ...
- poj3974(manacher)
传送门:Palindrome 题意:给定一个字符串,求最长回文子串. 分析:manach裸题,核心理解mx>i?p[i]=min(p[2*id-i],mx-i):1. #pragma comme ...
- 2014 CSDN博文大赛终于获奖名单发布
博文大赛第二阶段(2014年7月15日-2014年8月10日)已经结束,决赛获奖名单已在8月11日出炉. 现将获奖名单发布: 移动开发 NO.1 罗升阳 Luoshengyang S ...