1.SimulatorWin.cpp文件里的#define SIMULATOR_WITH_CONSOLE_AND_MENU 1
开 - 1
关 - 0
2.获取当前spine的所有动作名
SkeletonAnimation中添加
std::string SkeletonAnimation::getAnimationName()
{
std::string str = "";
std::string xing = "#";
for (int i = 0; i < _skeleton->data->animationsCount; ++i)
{
if (_skeleton->data->animations[i] && _skeleton->data->animations[i]->name)
{
if (i + 1 < _skeleton->data->animationsCount)
{
str += _skeleton->data->animations[i]->name;
str += xing;
}
else
{
str += _skeleton->data->animations[i]->name;
}
}
}
return str;
}
lua_cocos2dx_spine_auto.cpp中添加
int lua_cocos2dx_spine_SkeletonAnimation_getAnimationName(lua_State* tolua_S)
{
int argc = 0;
spine::SkeletonAnimation* cobj = nullptr;
bool ok = true;
#if COCOS2D_DEBUG >= 1
tolua_Error tolua_err;
#endif
#if COCOS2D_DEBUG >= 1
if (!tolua_isusertype(tolua_S,1,"sp.SkeletonAnimation",0,&tolua_err)) goto tolua_lerror;
#endif
cobj = (spine::SkeletonAnimation*)tolua_tousertype(tolua_S,1,0);
#if COCOS2D_DEBUG >= 1
if (!cobj)
{
tolua_error(tolua_S,"invalid 'cobj' in function 'lua_cocos2dx_spine_SkeletonAnimation_getAnimationName'", nullptr);
return 0;
}
#endif
argc = lua_gettop(tolua_S)-1;
if (argc == 0)
{
if(!ok)
{
tolua_error(tolua_S,"invalid arguments in function 'lua_cocos2dx_spine_SkeletonAnimation_getAnimationName'", nullptr);
return 0;
}
std::string ret = cobj->getAnimationName();
tolua_pushstring(tolua_S,ret.c_str()); //(const char*)
#pragma warning NO CONVERSION FROM NATIVE FOR std::string;
return 1;
}
luaL_error(tolua_S, "%s has wrong number of arguments: %d, was expecting %d \n", "sp.SkeletonAnimation:getAnimationName",argc, 1);
return 0;
#if COCOS2D_DEBUG >= 1
tolua_lerror:
tolua_error(tolua_S,"#ferror in function 'lua_cocos2dx_spine_SkeletonAnimation_getAnimationName'.",&tolua_err);
#endif
return 0;
}
在lua_register_cocos2dx_spine_SkeletonAnimation方法中添加
tolua_function(tolua_S,“getAnimationName”,lua_cocos2dx_spine_SkeletonAnimation_getAnimationName);
返回值用string.split(str, “#”)解析
3.资源加解密
https://www.cnblogs.com/cnxkey/articles/8579557.html
4.cocos2dx 3.x 主循环每一帧做的事情
一帧之内所做的事情(FPS):
1、事件检查和处理:在每一帧开始,C2d检查事件,有则处理分发事件。
2、动画更新:ActionManager会对每一个元素注册的所有动画执行响应计算,并更新其对应的属性值;
3、默认处理物理模拟碰撞;
4、程序自定义更新;
5、UI树的遍历;UI树的遍历主要是给每一个元素计算坐标变换矩阵,以及根据指定的逻辑深度排序,生成正确的绘制顺序。每个节点别遍历之后,讲发送绘制命令至绘制栈;
6、渲染系统根据员孙的globalZorder进行绘制,绘制完毕,交换前后缓冲区,将当前帧的内容回到屏幕上;
7、poolManger释放当前所有的autorelease对象;所以我们只关心对象的创建和使用,不需要关心其释放;
每一个步骤都会计入Ref对象类型的Ref对象,所以销毁的内容就比较清楚了
5.Ref的子类有:
事件、Event, EventDispatcher, EventListener,
动画、Action, ActionManager, Animation, Animation3D, AnimationCache, AnimationCurve< componentSize >, AnimationFrame,;
物理、Physics3DConstraint, Physics3DObject, Physics3DShape, Physics3DWorld,PhysicsShape,
渲染、RenderState, RenderState::StateBlock
文件、联网等;
安装 pip
先下载 pip 下载地址是:https://pypi.python.org/pypi/pip#downloads
选择 :pip-9.0.1.tar.gz 文件进行下载(版本随意)
下载完成之后,解压到一个文件夹,用CMD控制台进入解压目录,输入:
python setup.py install
同样,在安装pip后需先配置环境变量, pip 指令才能生效
找到 python 安装路径下 的 scripts 目录下,复制改路径,例如我的:
C:\Users\pandap\AppData\Local\Programs\Python\Python36-32\Scripts
纹理加载进内存以后占用内存计算公式是:
纹理内存(字节) = 宽 * 高 * 像素字节
像素字节 = 像素通道数(R/G/B/A) * 通道大小
也就是说:运行时大小 = 长x宽x每个像素占的大小
举例:rgba8888 表示的是通道rgba每个通道都占用8bit那么也就是一个像素占用了4bytes
故,图片大小若为1024x1024,则大小=1024x1024x4/1024/1024 = 4M