Cocos2d-X LUA 入门踩坑之小游戏
来源:互联网 发布:网络课程超星尔雅官网 编辑:程序博客网 时间:2024/05/05 17:16
作为一个刚刚入门的新人,接触cocos2d-x也就半个多月,在这里纯属个人看法以及踩过的一些坑,大神勿喷!
刚开始接触cocos2d-x的时候,在官网下载cocos2d-x最新版,发现与所学教程的版本不太一样,跟着旧版本quick做出来的东西在新版本下根本跑不动,对于旧版本例如quick3.5是已经不再维护了,刚开始跟着视频教程学,真心因为版本的问题快学不下去了,然后看一些cocos2d-x的书籍,虽然明白它是基于c++开发的,看书的时候也只能是大概了解引擎框架里的东西,用法啥的都是靠网上搜索才逐渐明白,但是这却耗费了大量时间,不断地在修复bug。在下载版本的时候建议初学者的可以先下载3.7版本的,里面生成的例子是一款消灭bug的小游戏,对于入门的人来讲还是有很值得借鉴的地方,还可以学习一下mvc框架。
本人最开始着手做的是一款打飞机的游戏,对于新手的建议是,即便是界面可以借助cocos studio来做,但是最开始还是手动用代码搭建界面吧,有利于熟悉cocos2d-x。
接下来就讲讲踩过那些坑吧
一、 记得在创建一个飞机精灵的时候把他添加到layer节点上的时候,运行的时候在场景中一直显示不了,其实刚开始不会的时候是在网上搜的,看别人用法是这样,所以感到也很奇怪,最后找到原因是layer没有作为结点添加进场景里。这种属于小问题,估计也是只有入门的人才会被坑到了。
第一行创建应该为 local layer = cc.Layer:create().addTo(self)
二、 触摸时间旧版本不适用的问题,建议新手在看到一些api的应用时候如果觉得不适用的话应该去官网看文档搜索一下是否有这个方法,应该如何使用,不过对我来说官网的东西用法说得少,基本上看一下有没有这个方法,然后还有看参数就自己琢磨了。
三、 之前就因为在使用坐标转换的时候,也就是世界坐标和相对坐标,使用的函数参数其实是一个,然而我在参数中使用了getPosition(),其实这个方法获取到的是两个参数,那个时候没理解好,其实cc.p()就可以作为一个参数传递进去了。
另外提醒一下新手,坐标转换不要随意使用,之前因为把飞机添加到layer上,触摸移动的时候飞机坐标没有跟着变,才想着用世界坐标,但是随后发现其实没理解好,无论是世界坐标还是相对坐标,都有一个参考点,而且世界坐标有自己的计算方式,要理解好,才能知道如何正确使用
四、 在代码中做循环遍历的时候,因为lua中table如果romove掉一个数据的话,后面的数据位置会往前挪,导致遍历的结果不理想,想要移除的对象并没有移除掉,所以可以使用倒序遍历的方法或者while遍历
例如: 1.for ,i paris table do … (为虚变量,就是不需要用到的变量) 2.while i=1,table do
五、 场景重置的时候,当前场景还会保留之前场景中的对象和事件,所以重置的时候应当使用迭代器将所有数据remove掉,以及清除监听事件,并且定时器也要记得关闭掉,否则进程会一直持续
六、 还有在循环过程中千万不要改变控制变量的值,否则结果就是你游戏运行多几次,小小的游戏就能卡哭人,后果太严重了,比如你开了个定时器,第一秒的时候遍历十次,第二秒因为变量值的改变,如果是增加,那第二秒就是遍历二十次,第三秒四次,然后一百次等等,结果是不可预知的
七、 提醒一下新手,lua毕竟和c++不一样,在运行游戏时候FPS左下角三行,如果想要去掉的话一定要在场景里使用导演类去除,看了网上教程都是AppDelegate.cpp里面做修改,那应该是c++工程的做法
去除FPS代码 cc.Director:getInstance():setDisplayStats(false)
八、 项目打包的时候遇到的坑
在配置的时候几样东西要准备好,ndk,sdk,ant,jdk
在下载ndk版本的时候一定要看跟自己的cocos2d-x版本是适用的,不要盲目下载,还有路径名字一定不能有空格,为了保证绝对不出错,所有的路径名也都最好用英文
九、 等我飞机小游戏做好的时候,项目也打包完毕的时候,要在手机运行发现在电脑模拟器上游戏可以正常进行,当在手机进行一段时间后再加载csb文件时候居然会出现闪退,那个时候内心是奔溃的,要知道我使用的工具是visual studio,打包编译也是用的命令行,要找闪退的原因都没有头绪了,在别人建议下搭建了eclipse环境,通过连接真机跑项目打印logcat日志才找出问题所在。新手们在搭建eclipse环境的时候也要小心了,最好能真机调试,不要在eclipse上使用模拟器,分分钟坑死人,还卡哭。记得在真机调试的时候先打包编译出现so文件在进行下一步,现在打包andorid也不要去使用以前交叉编译的旧方法了。
十、 最后,很感谢在我遇到众多问题的时候交流群的大神给我的帮助,学习编程这东西,在遇到bug又容易钻牛角尖的时候,应该努力寻求的别人的帮助才能获得更多思路。
- Cocos2d-X LUA 入门踩坑之小游戏
- Cocos2d-x-Lua 开发简单的小游戏(记数字踩白块)
- Cocos2d-x-Lua 开发简单的小游戏(记数字踩白块)
- Cocos2d-x 之Lua初学
- Cocos2d-X之LUA笔记
- cocos2d-x lua之创建剪切精灵
- cocos2d-x Lua 之 CCMoveTo 误区
- Cocos2d-x 之选择 Lua 还是 Javascript?
- Cocos2d-x游戏开发之Lua
- Cocos2d-x 之 lua 代码加密
- Cocos2d-x之LUA脚本引擎浅析
- Cocos2d-x Lua游戏开发之Lua 面向对象编程
- Cocos2d-x Lua游戏开发之Lua oo 的实现
- 《Cocos2d-x之Lua核心编程》读书笔记:Lua基础
- 初学cocos2d-x记忆小游戏
- [寒江孤叶丶的Cocos2d-x之旅_23]Cocos2d-x LUA实现事件分发器 lua EventDispatcher
- cocos2d-x 与 lua
- Cocos2d-x Lua action
- JAVA 文件基本概述
- 信号衰减电路分析
- Android OkHttp完全解析 是时候来了解OkHttp了
- 2801 LOL-盖伦的蹲草计划
- CSDN-markdown编辑器(以免忘记语法)
- Cocos2d-X LUA 入门踩坑之小游戏
- css常用样式(保持更新)
- 【蓝桥】 基础练习 十进制转十六进制
- 无限“递归”的python程序
- Java 设计模式情景分析 ——单例模式
- Nested Layouts
- 一个精妙单例CSingleton的赏析------逐渐抽象为单例CSingleton模板
- 算典05_例题_06_UVA-540
- 自动旋转渐变圆环