lua(仿单继承)】的更多相关文章

--lua仿单继承 Account = { balance = } --对于成员变量,第一此访问要使用元表中的,在第一次也赋值到自己的域中了 --将不涉及到__index了 function Account:new(o) o = o or {} --setmetatable看到后面,忘了这个啥意思了 --如a+b,当lua试图对两个表进行相加时,他会检查两个表是否有一个表有metatable, --如果知道检查到元表有__add域,如果有直接调用__add方法 setmetatable(o, s…
--lua仿单继承 Account = { balance = } function Account:new(o) o = o or {} setmetatable(o, self)--Account表本身作为o的metatable self.__index = self--自己作为自己的原型 return o end function Account:deposit(v) self.balance = self.balance + v end function Account:withdraw…
cocos2dx的extern.lua中的class方法为lua扩展了面向对象的功能,这使我们在开发中可以方便的继承原生类 但是用function返回对象的方法来继承C++类是没有super字段的,这使得在需要重写父类方法的时候没办法调用父类方法 在某位大神的博文中看到的代码 local _setVisible = nil local MyLayer = class("MyLayer", function() local layer = CCLayer:create() -- save…
lua - 多继承 1,模拟伪继承 新建extend_test.lua 新建extend_test.lua setmetable(a,b) b对象是a 对象的父类 a继承于b Account = { num = 10 } function Account:new(o) o = o or {} setmetatable(o, self) --让o 作为Account 子类 self.__index = self --原方法的索引 return o end function Account:show…
http://blog.csdn.net/ssihc0/article/details/7742323 Account={balance=}; --新建了一个对像,他有一个属性balance function Account:new(o) --这里的 :new(o) 中的冒号,代码可以省略self ,在访问的时候object:new(o) 如果是点号 :new(o) 就应改成 .new(self,o) 在访问的时候 object.(object,o) o= o or {} setmetatabl…
工程结构: BasePlayer.lua: BasePlayer = {} BasePlayer.root = "BasePlayer" function BasePlayer:ShowBaseName() print("ShowBaseName : BasePlayer") end return BasePlayer Player.lua: require "BasePlayer" Player = {} function Player:new…
(本文转载)学习之用,侵权立删! 原文地址   http://blog.csdn.net/y_23k_bug/article/details/19965877?utm_source=tuicool&utm_medium=referral lua面向对象实现: 一个类就像是一个创建对象的模具.有些面向对象语言提供了类的概念,在这些语言中每个对象都是某个特定类的实例.lua则没有类的概念,每个对象只能自定义行为和形态.不过,要在lua中模拟类也并不困难. lua中,面向对象是用元表这个机制来实现.…
一.简介 Lua是一门非常强大.非常灵活的脚本语言,自它从发明以来,无数的游戏使用了Lua作为开发语言.但是作为一款脚本语言,Lua也有着自己的不足,那就是它本身并没有提供面向对象的特性,而游戏开发是一项庞大复杂的工程,如果没有面向对象功能势必会为开发带来一定的不便.不过幸好Lua中有table这样强大的数据结构,利用它再结合元表(metatable),我们便可以很方便地在Lua中模拟出类.继承和多态等面向对象编程具有的特性. 二.前提知识 按照惯例,我们还是先来熟悉一下必要的前提知识,以便方便…
工程目录结构: ParentMother.lua: ParentMother = {} function ParentMother:MortherName() print("Morther name : HanMeimei") end return ParentMother ParentFather.lua: ParentFather = {} function ParentFather:FatherName() print("Father name : LiLei"…
lua面向对象实现: 一个类就像是一个创建对象的模具.有些面向对象语言提供了类的概念,在这些语言中每个对象都是某个特定类的实例.lua则没有类的概念,每个对象只能自定义行为和形态.不过,要在lua中模拟类也并不困难. lua中,面向对象是用元表这个机制来实现. 首先,一般来说一个表和它的元表是不同的个体(不属于同一个表),在创建新的表时,不会自动创建元表. setmetatable函数:设置元表 setmetatable( 表1 , 表2 )  将表2挂接为表1的元表,并且返回经过挂接后的表1…
[游戏开发]在Lua中实现面向对象特性——模拟类.继承.多态   阅读目录 一.简介 二.前提知识 三.Lua中实现类.继承.多态 四.总结 回到顶部 一.简介 Lua是一门非常强大.非常灵活的脚本语言,自它从发明以来,无数的游戏使用了Lua作为开发语言.但是作为一款脚本语言,Lua也有着自己的不足,那就是它本身并没有提供面向对象的特性,而游戏开发是一项庞大复杂的工程,如果没有面向对象功能势必会为开发带来一定的不便.不过幸好Lua中有table这样强大的数据结构,利用它再结合元表(metatab…
-- 类的例子,长方形的类,具备一个打印面积方法和一个设置长宽的方法 --lua实现类的思路,定义出来的对象在lua中可以访问自己有的成员,访问成员函数实际上是通过元表的__index方法实现的,具体点就是访问自己的成员函数,发现没有函数,然后判断是否有元表和__index元方法(当然都有,而且是必须有),然后就变成了访问元表也就是类的成员,自然就访问了成员函数 Cfx = { m_chang = , m_kuan = , m_area = } Cfx.__index = Cfx functio…
之前写了个C++版本的,现在改成lua的, 两者原理是一样,但是动作的执行方式有些微区别 (因为lua无法继承CCActionInterval类,单纯使用lua的话无法调用action的update方法) 下载地址:https://github.com/chenquanjun/Quick-x-CCLabelChange c++版本的也放到这个号了 --演示 --使用方法 do ) label:setPosition(display.cx - , display.cy) self:addChild…
原文1:[Unity3D]Unity3D游戏开发之Lua与游戏的不解之缘(上) 各位朋友,大家好,我是秦元培,欢迎大家关注我的博客,我地博客地址是blog.csdn.net/qinyuanpei.如果提到游戏开发,大家一定会想到C/C++.DirectX.OpenGL等这些东西,可是众所周知,游戏行业是一个需求变化极快地行业,如果我们采用编译型的语言,那么我们可能很难跟上这个时代的步伐,因为编译型的语言每经历一次重大地更新,整个项目都需要重新编译,这样无疑会影响我们的开发效率.那么,有没有一种更…
在之前的面试遇到考用lua实现类的题目.现在就补补这块知识点. 我们都知道Lua中的table是一个对象.拥有状态,拥有self,拥有独立于创建者和创建地的生命周期. 一个类就是一个创建对象的模具.Lua没有类的概念,但我们可以模拟类. 我们首先看看元表和元方法.这两个东西和我们模拟类有关. Lua 本身是函数式的语言,但借助 metatable (元表)这个强大的工具,Lua 实现操作符重载易如反掌.就像两个表相加,只要我们在元表中写上__add方法就可以实现了. meta={ __add=f…
在创建完cocos2d-x的lua项目后.打开项目的Resources中的extern.lua文件.里面有两个用于面向对象的方法.一个是用于克隆,一个是用于继承. 代码分析例如以下 --克隆一个对象 function clone(object) --用于存储被訪问过的对象的表 local lookup_table = {} local function _copy(object) if type(object) ~= "table" then--假设类别不等于table.返回当前參数…
http://blog.codingnow.com/2008/08/lua_is_not_c_plus_plus.html 嗯,首先,此贴不是牢骚帖. 话题从最近私人的一点工作开始.应 dingdang 的建议,我最近在帮 大唐无双 做一些程序上的工作.接手做这件事情,是因为这个内部被我们称作 dt2 的游戏 engine 关系重大.公司有至少四个项目在使用(另外三个暂处于研发期,尚未公布). dt2 用了大量的 lua 代码构建系统,但从系统设计上,沿袭了老的大唐的许多代码.原来的大唐是用 C…
Lua是一种很好的扩展性语言,Lua解释器被设计成一个很容易嵌入到宿主程序的库.LuaInterface则用于实现Lua和CLR的混合编程. (一)Lua from the CLR 测试环境:在VS2010中建一个C#控制台应用程序,并添加LuaInterface.dll的引用(安装LuaForWindows或直接下载LuaInterface都可得到该文件). LuaForWindows下载地址:http://luaforge.net/projects/luaforwindows/ LuaInt…
做cocos2d-x开发的人可能有不少人在实现类时会利用cocos2d-x自己给出的类的实现,也即在luaBinding目录下extern.lua的文件中给出的实现: --Create an class. function class(classname, super) local superType = type(super) local cls if superType ~= "function" and superType ~= "table" then su…
cocos2dx-lua function.lua 定义了class方法,让lua实现继承像传统语言一样漂亮和方便 看定义 function class(classname, super) local superType = type(super) local cls --如果父类既不是函数也不是table则说明父类为空 if superType ~= "function" and superType ~= "table" then superType = nil…
LuaInterface简单介绍 Lua是一种非常好的扩展性语言.Lua解释器被设计成一个非常easy嵌入到宿主程序的库.LuaInterface则用于实现Lua和CLR的混合编程. (一)Lua from the CLR 測试环境:在VS2010中建一个C#控制台应用程序.并加入LuaInterface.dll的引用(安装LuaForWindows或直接下载LuaInterface都可得到该文件). LuaForWindows下载地址:http://luaforge.net/projects/…
不能直接公开基类的函数,必须单独公开基类,并声明继承关系  deriveClass<Player, BaseController>("Player") 直接公开基类的函数会报错!!!!! 踩坑N次留念!!!!!!!!!!!! LuaBridge的主要特点      源码只有头文件,没有.cpp文件,没有MakeFile,使用时只需一个#include即可.      支持不同的对象生命周期管理模式.      对Lua栈访问方便并且是类型安全的(type-safe).   …
前言 公司开发的第二个虚幻4项目已经上线了,慢慢趋于稳定.回想起开荒的日子,历历在目.从引擎脚本的选择,各工具(导表,协议生成...)的重构.开发, 引擎扩展(多骨骼支持,Notify扩展,技能编辑器...),UMG蓝图的设计.适配,战斗Demo的创建,开发流程的接轨,功能堆砌,人员一波波的更迭... 回到正题,18年中,立项的时候,UE4的脚本语言都在实验期,没有成熟的,Python.JS V8.Lua等等开源的脚本也都测试过,最终选择了Lua,主要是基于: 1.Lua语言在游戏业的广泛引用性…
LuaBind --最强大的Lua C++ Bind 转载:http://www.cppblog.com/deane/articles/49208.html1 介绍LuaBind 是一个帮助你绑定C++和Lua的库.她有能力暴露 C++ 函数和类到 Lua . 她也有能力支持函数式的定义一个Lua类,而且使之继承自C++或者Lua. Lua类可以覆写从 C++ 基类继承来的虚函数. 她的目标平台是Lua 5.0 ,不能支持Lua 4.0 .她利用模板原编程技术实现.这意味着,你不需要额外的预处理…
基类:基类定义了所有对于派生类来说普通的属性和方法,派生类从基类继承所需的属性和方法,且在派生类中增加新的属性和方法. 继承:继承是C++语言的一种重要机制,它允许在已定义的类的基础上产生新类. lua基类和C++基类极为相似,但是lua中却没有继承这一说,更没有所谓的派生类.lua只能通过一种行为(元表)来模拟C++继承这一方法. 元表:lua中提供的元表是用于帮助lua数据变量完成某些非预定义功能的个性化行为,当它做某一种操作,然而self表中却没有定义实现这种操作的方法,那么为了实现这一操…
首先看看从lua表中查找一个键时的流程: -- 当从表t中查找键k时,lua处理如下: -- 1.t中是否有k,有则直接返回值,否则第2步 -- 2.t是否有元表, 无则返回nil, 有则第3步 -- 3.t的元表是否有__index元方法, 无则返回nil, 有则查找__index指向的表或对应的方法 ---注意两种写法 -- 写法1, 可以保持继承链 local class = {} function class:new() self.__index = self return setmet…
Lua本身是不能像C++那样直接实现继承,但我们可以用万能的table表来实现. 以下我总结了三种方式的类以及继承的实现 第一.官方的做法,使用元表实现 原理参照<Programming in lua> Object.lua Object = {class_id = } function Object:new(o) o = o or {} setmetatable(o,self) -- 对象o调用不存在的成员时都会去self中查找,而这里的self指的就是Object self.__index…
-- Lua中类的实现 -------------------------------- 基类 ---------------------------- classBase = {x = 0,y = 0} -- x,y为类的成员变量 classBase.__index = classBase -- 这句是重定义元表的索引,必需要有 --模拟构造体,一般名称为new() function classBase:new(x,y)         local self = {}     -- 初始化对象…
1.类继承 ①代码 Sharp = { } --① 父类 function Sharp:new() local new_sharp = { } self.__index = self --②,self == Sharp setmetatable(new_sharp, self) --③ return new_sharp end function Sharp:sharp_func() print("Sharp call sharp_func") end function Sharp:na…
[元表] 元表中的键为事件(event),称值为元方法(metamethod). 通过函数getmetatable查询不论什么值的元表,通过函数setmetatable替换表的元表. setmetatable(仅仅能用于table)和getmetatable(用于不论什么对象) 语法:setmetatable (table, metatable),对指定table设置metatable      [假设元表(metatable)中存在__metatable键值.setmetatable会失败]…