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也有着自己的不足,那就是它本身并没有提供面向对象的特性,而游戏开发是 ...
随机推荐
- CF 327D - Block Tower 数学题 DFS 初看很难,想通了就感觉很简单
D. Block Tower time limit per test 2 seconds memory limit per test 256 megabytes input standard inpu ...
- svn强制用户提交时写日志
#!/bin/sh REPOS="$1" TXN="$2" SVNLOOK=/usr/bin/svnlook #根据你的SVN目录而定 LOGMSG=`$SVN ...
- HDU 2444 The Accomodation of Students(推断是否是二分图)
题目链接 题意:n个学生,m对关系,每一对互相认识的能住一个房间.问否把这些学生分成两组,要求每组的学生都互不认识.求最多须要多少个房间. 能否分成两组?也就是说推断是不是二分图,推断二分图的办法,用 ...
- Java程序猿的JavaScript学习笔记(3——this/call/apply)
计划按例如以下顺序完毕这篇笔记: Java程序猿的JavaScript学习笔记(1--理念) Java程序猿的JavaScript学习笔记(2--属性复制和继承) Java程序猿的JavaScript ...
- ORACLE:plsql优化
1.登录后默认自动选中My Objects? 设置方法:Tools菜单--Brower Filters会打开Brower Filters的定单窗口,把“My Objects”设为默认即可.? 同理 ...
- Android实战简易教程-第九枪(BitmapFactory.Options对资源图片进行缩放)
我们知道,我们编写的应用程序都是有一定内存限制的.程序占用了过高的内存就easy出现OOM(OutOfMemory)异常.因此在展示高分辨率图片的时候,最好先将图片进行压缩,压缩后的图片大小应该和用来 ...
- [linux]ubuntu apt-get安装软件失败
1.首先查看 dns 配置 sudo vi /etc/resolv.conf nameserver 114.114.114.114 nameserver 8.8.8.8 2.修改 apt-get 源 ...
- HBase经常使用操作之namespace
1.介绍 在HBase中,namespace命名空间指对一组表的逻辑分组,类似RDBMS中的database,方便对表在业务上划分.Apache HBase从0.98.0, 0.95.2两个版本号開始 ...
- 安装 MYSQL exec: g++: not found 报错
解决办法: yum install -y gcc-c++
- Django写的投票系统3(转)
Django的管理面板默认是不开启的,所以我们需要进行一些设置工作1.在INSTALLED_APPS里面把 django.contrib.admin 前面的注释去掉2.运行 python manage ...