细数cocos2d踩过的那些坑

cocos2d-x版本:3.2
cocostudio版本:1.6.0
开发语言:Lua,使用cocos本身导出的Lua的API

cocostudio相关:

1. 骨骼设置隐藏时,若该骨骼动作的第一帧是没有渲染贴图的,则设置会失效,查看源码如下:

void DisplayManager::setVisible(bool visible)
{    
	if(!_displayRenderNode)
		return;
	_visible = visible;
    _displayRenderNode->setVisible(visible);
}

_visible = visible;

提到第一句即可。

2. 子骨骼在动作里没有父骨骼的情况下会全部乱掉,并没有通过源码发现。

3. 换贴图的情况下,如果编辑器动作是通过不渲染贴图的方式来做,那么实际播放中如果有换装则会导致隐藏失效,并没有通过源码发现。

将cocos2dx里的lua升级至5.3

由于项(ge)目(ren)需(xing)要(qu),决定将项目的代码升级到最新的5.3.0版,源码点这下载

由于cocos2d-x是个跨平台项目,所以要分别对windows,android,ios三个环境均要做一定修改。而由于cocos2d-x默认是使用luajit的,而最新的luajit并不支持Lua5.3,所以作为代价就是放弃jit带来的效率提升,然而这个对我们的项目其实并没有什么影响(游戏玩法决定不需要太注重效率)
继续阅读

cocos2d-x的锚点与坐标

最近被cocos2d-x的坐标问题绕晕了头,这里整理下。

position: 每个node都有一个position,这个position是相对于它的父节点的坐标,所谓的世界坐标可以认为就是直接挂载在scene下的node的坐标。
AnchorPoint:每个node都会有自己的AnchorPoint,它的作用仅在于在设置position时,是将图片中的哪个点设置到那个位置。

需要注意的是
1 position是逻辑位置,而不是实际像素
2 这个坐标系与windows的坐标系的y轴是反的,cocos2d里(0,0)是在左下角,而不是左上角。
3 每个node的position都是相对父节点的(0,0)的位置,与父节点的锚点无关!我就是因为这个问题没搞清楚在这里绕晕了……

使用cocos2d-x的console实现远程调试

使用Lua开发有一个很爽的地方就是可以从控制台实时输入Lua指令来进行调试,但是之前该方法仅在windows下有效,之前也介绍过,见这里。研究了下发现cocos2d-x是有一个console类来支持远程调试的,哈哈,从此真机调试也可以很方便了。

这里先介绍下console的关键API先:

listenOnTCP(number) 这里参数是监听的端口号
addCommand(tb, funciton) 这里第一个参数是一个表,内容如下:{name = "指令名", help = "指令介绍"},第二个参数就是执行的函数了,传入参数为(句柄,字符串参数)

继续阅读

Cocos2d-x 3.2 Lua 在Android设备闪退问题解决记录

描述:iOS设备运行正常,windows环境下模拟器程序运行正常,但是Android设备大多数都有运行一段时间闪退的问题。

第一次运行android设备上时使用版本3.0,后来升级到3.1.1,再到3.2,Android闪退问题一直存在,尤其是在红米系列设备,几乎必现。
因为对Android开发不是很熟悉,没法直接定位到导致crash的地方,于是请教了同事,后发现是打包的API版本过高,修改后闪退问题有明显好转,但是依然存在,最近项目进度不是那么赶,于是决定要彻底追查这个问题。
继续阅读

cocos-lua Scene介绍

cocos-lua里的Scene是对cocos2d的scene进行进一步的逻辑封装,增加常用的功能及方便管理,整个游戏都由一个个Scene来构成,所有的表现代码都应该在Scene里完成,而所有的Scene都由SceneMgr来管理,

SceneMgr

管理场景模版。

管理场景实例。管理结构为由Scene构成的栈,通过LoadScene和UnloadScene完成进栈和出栈,其中第一次加载需要用FiresLoadScene。

接口列表:

继续阅读

一套基于Cocos2d-x的Lua快速开发框架

   最近半年一直都在研究cocos2d-x的开发,由于自身对Lua的喜好,所以基本从一开始都是使用Lua作为主要开发语言,在开发过程中,也对cocos2d-x有了一定了解,但是说实话cocos2d-x对Lua的支持还是不太友好,基本还是停留在“能”使用Lua开发的阶段,只是使用了tolua++将API都导出来了而已,没有对lua开发者做更进一步的帮助,这样其实并没完全体现Lua的优势。

    其实开发初期就听闻有一个“quick cocos2d-x”的项目,也是采用的Lua,顾名思义目的就是为了提高开发者的效率。对这个项目使用了一番,觉得它做的那个模拟器机制是个不错的想法,虽然还有很多bug。对它这个框架的有些核心思想不是太认同,主要是这个框架对cocos2d的源码进行过修改,而不是一个纯粹的lua级框架,这样做势必自己必须要有一个cocos2d-x的分支,这样会带来一个很要命的问题——在cocos2d-x进行功能增加或者bug修复的时候,需要做大量的工作来将他们合并入自己的分支,所以也就没太关心它的架构实现了。(另模拟器提供的重载不是脚本级的,而是重启进程这点也不是很满意)

    所以最后还是选择了自己来写一套基于cocos2d-x的纯粹的Lua级的框架,针对开发过程中开发者一般都会遇到需要解决的问题做了框架级的封装,使我们可以将更多的心思花在项目的逻辑上,而不用关心太多cocos2d的细节。(比如屏幕的拖拽,缩放,UI资源的加载管理这些等等)

    目前这个框架也在公司的项目里开始运用,表现的还不错,而且也在不断的完善中,但是要把它使用起来还是要花上几分钟来配置,所以今天花了点时间写了个python脚本来做配置。另这个项目本身就是寄放在github上的开源项目(https://github.com/yestein/cocos-lua),打算最近花些时间对这个框架写些说明文档将其正式开源出来,也希望它可以接受更多的检验,成长的更好。未来我也会在这里专门开辟一个专栏来对其进行说明。

cocos2d-x中搭配Box2D使用PhysicsEditor

最近开始使用cocos2dx里的物理引擎,多边形是必不可少的,如果是自己手写顶点的话就太……了。所幸的是已经有人做了一款支持导入的软件,它就是PhysicisEditor(下载地址)(除了Box2D外,也支持chipmunk等多款引擎),而且Example中自带cocos2dx的解析CPP(已经过时,不过我已经修改了下,使其支持最新的cocos2dx 3.0 alpha1,打算跟作者沟通下,让其更新出去),这款软件虽然不是免费的,但是可以通过向作者发申请来获得授权(鄙人就是这么得到的,呵呵)。

申请license网址:http://www.codeandweb.com/request-free-license 

好了,废话不多说,简介下这款软件,界面如下图: 继续阅读

【cocos2d-x】控制台直接输入Lua指令

用脚本进行开发,如果不能实时去输入指令,就丧失了脚本的一大特色,所以对cocos2d-x程序稍微修改下,使其可以直接从控制台读入lua指令,方便调试。

改进版见这里

这里我们采用最简单的方法,直接修改main.cpp。

1 首先在行首加入lua的引用,如下

#include "main.h"
#include "AppDelegate.h"
#include "cocos2d.h"
#include "CCLuaEngine.h"

2 在main函数前面插入以下代码

继续阅读