请教cocos2dx 3.0 lua-lua继承问题

请教一个Cocos2dx 2.2 场景跳转的问题
[问题点数:20分,结帖人xupark]
请教一个Cocos2dx 2.2 场景跳转的问题
[问题点数:20分,结帖人xupark]
不显示删除回复
显示所有回复
显示星级回复
显示得分回复
只显示楼主
相关帖子推荐:
匿名用户不能发表回复!|
每天回帖即可获得10分可用分!小技巧:
你还可以输入10000个字符
(Ctrl+Enter)
请遵守CSDN,不得违反国家法律法规。
转载文章请注明出自“CSDN(www.csdn.net)”。如是商业用途请联系原作者。该系列其他文章
详解Quick-Cocos2d-x继承机制
这篇文章让我们来理解下QuickCocos2dx的继承机制,关于继承这个概念,是OO思想里提出来的。在C++中,我们就不说了;在lua中,是用table配合元表metatable来实现面向对象的。下面分两部分来理解Quick中的继承机制。
第一部分:LUA的继承
充电站:元表
lua中的元表和js的原型非常相似,熟悉js的朋友应该发现了
在lua中,每一个表都有TA的元表metatable,lua默认创建一个不带元表的新表:
print(getmetatable(t)) --nil
mt = {name = "quick"}
setmetatable(t, mt)
assert(getmetatalbe(t) == mt)
LuaInherit lua继承
图示代码:
--====================Person======================
local Person = {}
Person.attack = 5
function Person:new(o)
o = o or {}
setmetatable(o, self)
self.__index = self
function Person:setAttack(attack)
self.attack = attack
function Person:getAttack()
return self.attack
--====================Hero======================
local Hero = Person:new()
Hero.name = ""
Hero.skill = ""
--====================hero1,hero2======================
local hero1 = Hero:new()
hero1.name = "金刚狼"
hero1.skill = "甩开爪子切牛排"
local hero2 = Hero:new({name = "超人"})
hero2.skill = "内裤外穿走T台"
----====================================================
function printKeys(name, t)
print("======================" .. name)
for k, v in pairs(t) do
printKeys("Person", Person)
printKeys("Person.__index", Person.__index)
printKeys("Hero", Hero)
printKeys("Hero.__index", Hero.__index)
printKeys("getmetatable(Hero).__index", getmetatable(Hero).__index)
printKeys("hero1", hero1)
printKeys("hero2", hero2)
结合log我们分析下:
======================Person
======================Person.__index
======================Hero
======================Hero.__index
======================getmetatable(Hero).__index
======================hero1
======================hero2
[Finished in 0.0s]
假如当我们调用hero1:setAttack(500)的时候,在hero1中是找不到setAttack方法的,这时候:
lua会通过getmetatable(hero1)得到hero1的元表并到元表的__index域中去查找,箭头走向:3---》2
但仍然没找到,得到Hero元表并继续在其__index域中寻找,箭头走向:1---》0,这时候寻找到setAttack方法并且调用,由于setAttack方法,hero1会增加字段attack。
第二部分:QUICK的继承
quick的继承实现要考虑到对C++对象的继承和对lua对象的继承。对lua对象的继承我们第一部分已经用元表机制说明。当我们在quick中用class新建类时,始终要清醒的明白,我们新建的类其实就是返回一个lua表(cls).
继承的核心代码见framework/functions.lua中class(classname, super)函数。
为了方便理解,上个图先:
quick-x class
函数class(classname, super)有两个参数:
参数1:classname,见名知意,类名
参数2:super
1.super的类型:superType = type(super)
2.superType可以为function,&table,当不为这两种类型的时候我们将之置为nil
3.superType为function的时候,表示从C++对象继承,走图示2
4.superType为table的时候,还要看其__ctype值,1表示继承自C++对象,走图1;2表示继承自lua表对象,走图3
5.superType为nil的时候,从lua表继承,走图4
samples/coinFlip项目是个绝佳的例子,我们可以结合该范例进行理解。这里我就不赘述了。
更新:在谷歌邮件组Jacky的回复中,提到了另外一个朋友写的文章,非常不错,针对本文的第二部分讲解的很透彻,
来源网址:
评论内容不能为空。请教关于cocos2dx跨平台项目引用cocos-ext.h的问题
[问题点数:40分]
请教关于cocos2dx跨平台项目引用cocos-ext.h的问题
[问题点数:40分]
不显示删除回复
显示所有回复
显示星级回复
显示得分回复
只显示楼主
相关帖子推荐:
匿名用户不能发表回复!|
每天回帖即可获得10分可用分!小技巧:
你还可以输入10000个字符
(Ctrl+Enter)
请遵守CSDN,不得违反国家法律法规。
转载文章请注明出自“CSDN(www.csdn.net)”。如是商业用途请联系原作者。1695人阅读
享受脚本语言灵活、更新方便、免于编译的好处,但也不能忍受离开那些方便的IDE特性(跳转、自动完成)。
搜集整理了一些使用Sublime Text编辑cocos2dx-lua工程的资料,希望能给大家带来帮助。
一、自动完成(auto-completion)
A.输入过的单词
本文件内输入过的单词,ST(sublime text)均会给出补全提示。这点甚至比大多数IDE都要强(一般只给出符号提示,对于字符串这类纯文本不提示)
B.跨文件函数调用
跨文件的文本提示,ST需要插件支持。目前使用的一个插件,支持跨文件的函数补全,提示参数信息。这个插件只有一个python源文件,100多行代码。原本只支持js。我对它进行了一些lua支持的小修改
C.cocos2dx api,自定义API
脚本中经常会调用一些导出的cocos2dx api,或者我们自定义的一些c++扩展API
,这个插件通过cocos2dx的tolua++ pkg文件,生成了一堆ST snippet(代码片段),达到了自动提示API的目的
&我对它也进行了一些修改:a.导出pkg文件里的枚举定义 b.非static函数,自动补全时,不补全类名
D.ST补全机制简介
以上的几种补全方法,充分利用了ST提供的补全扩展机制。ST补全时,会按以下次序考虑补全选项
a.snippet(代码片段):指定关键字到一大段代码的映射,每个snippet要存储为一个单独的文件。cocos2d_lua_snippets采用的是这种方式
b.API-injected completions:python插件里可以注册回调函数,返回可能的补全选项,可以有逻辑,更灵活一些。MySignaturePlugin采用的是这种方式
<pletion file:我理解就是用一个文件存储大量简短的snippet。我写的cocos2dx枚举&#20540;补全采用的是这种方式
d.buffer:就是ST自带的本文件单词补全
以上的补全方法,都只是简单的文本级的匹配,无法像IDE对静态语言那样,进行语法分析后,根据当前上下文限制补全的内容。&#20284;乎动态语言的智能感知,本就比较困难,一个变量的类型,往往是运行时才可以知道,并且是可以变化的。
在一个讨论lua编辑器补全的帖子里,我看到一个Glider(一款商业lua IDE)员工的。好像他们采用编辑器内置lua虚拟机的方式,可以实现更加强大的补全功能。
ST方面,更有潜力,更加强大的重量级插件有:
但是这两个插件目前都不支持lua,代码量也比较大,不太便于修改
同样是动态语言的js,这方面的支持就好得多,除了上面提到的SublimeCodeIntel,就连Visual Studio都提供了对js的智能感知。相比大量应用js的web开发,大量应用lua的游戏开发只能说是小弟弟了。若不是对精心设计的lua语言有好感,放不下它的coroutine机制,我想在cocos2dx里直接使用js绑定更加方便呢(几个zynga的老外全力搞js绑定,导致后起的js绑定在很多方面都已经领先lua绑定了)
这里推荐Sublime Text 3的跳转功能。除了继承二代的文件内符号跳转,三代更是加入了文件间符号跳转
感觉ST的符号跳转,比IDE的功能还要好用,全程键盘操作,预览-返回,谁用谁知道
不过ST3的文件间跳转&#20284;乎还不支持预览-返回
在github上看到好用的仓库,自己不确定会不会修改,一般会选择clone操作。但是这样万一以后修改了,不像fork那样,可以pull request,很难贡献代码。不管是否修改,直接fork的话,感觉又有些重度了。不知有没有其它的操作流程?
----------------------------------------------------------------------------------------------------------------------------------
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:301464次
积分:4077
积分:4077
排名:第2605名
原创:47篇
转载:283篇
评论:57条
(1)(7)(21)(3)(11)(6)(1)(2)(13)(8)(11)(6)(12)(26)(7)(16)(5)(13)(1)(2)(13)(6)(4)(8)(11)(4)(2)(9)(1)(1)(1)(3)(2)(5)(4)(3)(1)(1)(1)(6)(1)(1)(1)(3)(6)(2)(5)(2)(6)(1)(2)(3)(7)(6)(12)(1)(3)(12)(15)(5)主题 : 请教一个问题,我继承UITableViewCell,但这个Cell似乎无法显示accessoryView}

我要回帖

更多关于 cocos2dx lua json 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信