BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / mobile-terminal-at / #17893同步于 2014/11/21
该镜像源已超过 30 天没有更新,可能在源站已被删除。
MobileTerminalAT机器人发帖

我可以在这里问quick-cocos2d-x的问题吗?

ytinrete
2014/11/21镜像同步26 回复
求助的说,我知道这里有很多做手游的大神qwq 问题很简单,在lua里面继承引擎自带的类,怎么调用父类的构造方法将对象初始化: 比如我这样定义一个MySprite,继承CCSprite MySprite = class("MyApp", CCSprite) function MySprite :ctor( params ) -- 在这里调用父类构造方法 end 调用: local newSprite = MySprite.new({texture = "/img/cat.png"}) 我试过了一下写法都行不通哎: self.super(params.texture) CCSprite:create(params.texture) self.super.ctor(params.texture) 怎么办呐???初学求不喷
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
apocalypse机器人#1 · 2014/11/22
不懂quick 但是做过 原本的 2dx+lua quick 在原本的2dx+lua的基础上进一步封装了所有C++类的lua接口转换。。这部分变化刚好是你的问题的KEY点。。。 lua只是个脚本解析引擎。。他不是游戏引擎。。游戏引擎是C++ 在lua里调用C++ 你得明白几个过程 第一个过程 lua没有能力做游戏功能,所有的游戏引擎的各种基本类(CCxxx)一定是C++的,lua只是负责组织调用C++ 第二个过程 lua里要调用的C++类。。。一定得经过一个该类所有C++的接口,函数,都必须经过严密的重定义指向,来转换为lua的接口。。lua才能调用 在lua里掉CCsprite的接口 就是lua通过这个重定义的转换,进而去调用C++ 明白这两个步骤。。有个解决问题的思路 1 你构造的这个newsprite 是lua对象 还是C++对象 如果是C++对象 ,这个C++对象你是否已经准备好了相对应的newsprite的C++类,并且自行写好了一切重定义指向的函数转换 2 你构造的这个newsprite 如果是lua对象。。他怎么能够继承自C++ 你可以让一个lua对象持有几个C++的对象(如果你不想进行C++编程,那么久只能持有最基本的现成的C++类),这样的话不应该存在你说的问题。 3 你是想直接构造一个lua对象 继承自C++?还是说 你想直接通过 MySprite = class("MyApp", CCSprite) 这么一条lua语句,生成一个C++没有的新C++对象,并且这个对象根本没有.h .cpp文件?同时也没有进行 C++ to lua lua to C++ 这一大堆繁杂的重定义转换? 这是不可能的 lua的运行原理是。。lua没有任何的游戏引擎功能。。他只能跑C++能支持的部分。。。C++能支持的意思就是。。具有完整的.H .CPP文件并且有完整的重定义转换。。。 lua 是脚本语言解析器 他能解析脚本 动态的随时改变到底是绘制A(按钮)还是B(文本框)。。前提是 C++内部都已经同时存在按钮 文本框的功能并且编译好,转换好了。。如果你让lua绘制一个C(滚动条)是c++不认识的。。lua没有这个能力 以上都只是 cocos2dx bind lua 的基本方式。。quick 我没用过。。但我觉得 他没可能撼动这套解构。。。 当然 也有可能 quick就是牛逼的 支持了╮(╯_╰)╭ 那我就不知道了
apocalypse机器人#2 · 2014/11/22
回到问题上来 你为啥要选择 创建一个类继承自ccsprite? 看起来你的目的似乎就是 让这个类 能自行的实现 {texture = "/img/cat.png"} 这种默认图的设置? 在lua里 换个思路你看行不行? 就像我说的第二个方法。。 你创建一个 lua对象。。(lua对象这个词好像有点模糊。。我也不知道咋解释清楚。。毕竟 那玩意不能算是一个类,而且 我也告别cocos2dx+lua快两年了) 这个lua对象内可以 自动构建一个 ccsprite类 并且赋值{texture = "/img/cat.png"},lua对象不是ccsprite不能直接被addchild,但是你可以通过这个lua对象返回这个已经被创建并且初始化赋值好了的ccsprite,再addchild 那些需要集成基本cococs基类的场景,可能都是很复杂的使用场景,比如你要创建一个新的控件,那种横向纵向滚动tableview,但是滚动在中心的cell会放大,滚动两侧的tableview 会缩小等需求。。。 这种情况 cocos提供的系统控件根本无法满足需求。。于是需要在C++层重新写好这个控件的类,并且写好重定义转换lua的接口。。。于是才在lua里调用。。
apocalypse机器人#3 · 2014/11/22
不用cocos2dx + lua 太久了。。。。只记得基本结构了。。。。不排除有误的可能性╮(╯_╰)╭
sollian机器人#4 · 2014/11/22
老哥好厉害 【 在 apocalypse 的大作中提到: 】 : |不用cocos2dx + lua 太久了。。。。只记得基本结构了。。。。不排除有误的可能性╮(╯_╰)╭ ☆爱邮☆ 一生有你
apocalypse机器人#5 · 2014/11/22
【 在 sollian 的大作中提到: 】 : 老哥好厉害 : ☆爱邮☆ 一生有你 我只是工作做过一年 游戏开发=。=
ytinrete机器人#6 · 2014/11/22
非常感谢前辈,我发现问题所在了 原来我天真地认为之所以使用lua是因为它写起来比c++简单,它能够实现c++能做的所有功能,只是“写起来很方便”这种感觉,不过现在看起来不是这个样子,lua只是遥控器,并不是画笔啊 所以一开始的方向就错了,不过现在明白原理以后就不是问题了 起初想实现的其实很简单,就是让精灵在创建之后能够自定义一些动画(比如从屏幕右侧滑出来这种感觉),使用起来就很方便,根据一般的设计思路当然就是继承精灵类然后再封装自定义的动画进去对吧,没想到lua根本做不到啊(摔、、 最后没办法只好曲线救国,也跟前辈说的基本相同,还是调用CCSprite:create(图片),但是把它作为lua的table中的一个元素,使用的时候把它“.”出来再用,但是这根本不叫面对对象啊,明明就是拖油瓶嘛有木有,而且现在只是动画而已,将来要实现拓展,使用CCSprite基类完全做不到的功能怎么办呐。。。 所以说当我需要使用的c++对象实现某些功能,引擎本身封装的对象没提供这样的方法,这样lua也做不到了,需要在C++代码里继承引擎的那些类,然后再手动去实现它,最后才能从lua调用对吧。 但是听起来好像很复杂哎,tolua还有lua++这类的东西在我看来就是黑科技般的存在嘛,神马重定义的转换的好可怕。。。 我比较小白,有没有比较标准化的流程参考啊,第一步做什么,第二步做什么,第三步做什么,然后,当啷,野生的lua成功调用了自定义的c++函数酱紫的 另外前辈方便的话可以解释一下2dx引擎的回收机制嘛?我在初始化的时候用一个lua变量引用了引擎里创建的类 比如local myImageView = ImageView:create(), 但是我没有把它放到容器(比如layer)里面,于是之后再使用它(比如button的回掉方法里)但是发现,啊咧,用不了呢,但是myImageView并不是nil,后来查了一点资料才知道他由于没有使用,所以引擎在“下一帧”把它干掉了。 于是问题来了:挖掘。。啊,不。 首先我可以这么理解吗?将创建好的对象放在layer上,由于layer在sence上,sence在director上,director是单例,所以就像一棵树状结构一样,由于根节点能活下来,所以依附在根节点的子节点也能活下来。由于ImageView没有附在上面,所以被当作废弃资源被回收了。但是我不明白所谓的“帧”是什么概念?是时间片吗?(隔一段时间垃圾回收机制检查一次?)在所谓的“一帧”内,引擎到底干了啥?引擎又是以什么样的轮询标准把这些操作定义为“一帧的” 好吧,我基础比较差,求不喷 【 在 apocalypse 的大作中提到: 】 : 不懂quick 但是做过 原本的 2dx+lua : quick 在原本的2dx+lua的基础上进一步封装了所有C++类的lua接口转换。。这部分变化刚好是你的问题的KEY点。。。 : lua只是个脚本解析引擎。。他不是游戏引擎。。游戏引擎是C++ : ...................
ytinrete机器人#7 · 2014/11/22
另外可以问一下前辈有点额外的问题嘛? 。。。手游公司是不是一般加班的比一般的互联网公司还要狠。? 这周是我实习的第一周,最早十一点半下班(比如今天),一般一点半qwq 早上是10点上班。 其实没人要求我这么晚走的,但是从leader到我的导师直到比我之前来的实习生大家都这样, 怎么好意思先走啊orz,而且好像大家都习惯了QAQ 公司福利待遇leader啥的什么都很好,做的东西我也挺感兴趣的,唯独加班这一点,呃。 互联网公司都是这样的么?如果是这样的话,那作为一个男孩子我也就不矫情了。 或者说手游公司都是这样的吗?如果是这样的话,既然决定入坑了我也就不矫情了。 或者说是有时间段的,有忙有闲?公司下个月初有新游戏上线,也许刚好被我碰到了高峰时段?这样勉强接受吧 还是我司真的比较那啥,真的如此的话我得慎重考虑了 = = 不过作为渣本手上只有某为保底offer,要是真的走到离职那一步,我这样的水平也只能去某为了 我知道这个应该发到毕业生版,但是我知道这里的大大更热心更靠谱,就让我再死皮赖脸的问吧 【 在 apocalypse 的大作中提到: 】 : 回到问题上来 : 你为啥要选择 创建一个类继承自ccsprite? : 看起来你的目的似乎就是 让这个类 能自行的实现 {texture = "/img/cat.png"} 这种默认图的设置? : ...................
icyfox机器人#8 · 2014/11/22
没事,他啥都知道~~ 【 在 ytinrete (ytinrete) 的大作中提到: 】 : 另外可以问一下前辈有点额外的问题嘛? : 。。。手游公司是不是一般加班的比一般的互联网公司还要狠。? : 这周是我实习的第一周,最早十一点半下班(比如今天),一般一点半qwq : ...................
ytinrete机器人#9 · 2014/11/22
嗯嗯,我也觉得那位学长很靠谱呢 【 在 icyfox 的大作中提到: 】 : 没事,他啥都知道~~ :