cocos2dx

时间:2023-10-24 16:25:49编辑:小蔡

1,cocos2dx和unity3D哪个好?

首先目前来看unity3d 因为是3d引擎,目前对2d支持并不完善,unity3d 目前做2d普遍两种思路,一种是正交相机,3d画面2d视角,另一种是通过一些插件,动态创建mesh来绘制图形单元目前用的较多的是2d toolkit,ex2d,smooth moves,sm2,最近uni2d 刚刚更新,支持骨骼动画,像素级碰撞,是个很赞的2d 插件,如果时间上你不急的话,unity3d 将于秋季发布原生的2d工具,看过视频,效果不错,开发效率的话 因为全部都是可视化编辑,而且一键跨平台,所以相对cocos2d-x 效率稍微高一点,人员招聘的话有点难度,大部分有经验的在目前这个时间点准备换工作的应该不多,有意愿求职的大部分都没有经验,对于以后发展来说,因为跨平台的优势越来越明显,而且官方的更新也是比较快的,功能方面不多增加。最主要是2d出了以后,2d3d都支持,长远来看,比cocos2d-x 前景明朗

再看cocos2d-x ,首先开发难度,对于熟练C++的来说难度不大,本身就是2d引擎,相对来说目前方案比较成熟,开发效率如果有经验的话,也是很快的,人员招聘的话,相对unity3d 的好找一点,毕竟C++程序很多,对于以后发展,目前来看,cocos2d-x 基本已到瓶颈,即使有更新,变化不会太大

2,cocos2dx的3d 怎么获取cc对象

cocos2dx的3d获取cc对象:通过对导演、场景、层和节点的剖析,现在我们已经可以写出一个完整的游戏体系了。获取精灵的方法可以考虑将你的所有精灵加入到一个单例层里作为精灵管理层,加进去的时候定义好TAG值,方便随时随地可根据TAG值取到想要的精灵。触摸坐标否在精灵上第一个思路是先获取你的sprite的boundingBox,和你触摸点坐标,判断触摸点坐标是否包含于sprite的区域内。主要功能:图形渲染:包括2D图片、文字、序列帧动画、骨骼动画、粒子、特效等渲染,在v3.3版本开始加入简单的3D模型渲染和3D动画。音频功能:支持游戏内的音效和背景音乐播放控制。资源管理:图片、音频和脚本资源的加载、缓存及释放。物理模块:通过集成 2D 物理引擎 Box2D 和 Chipmunk、3D物理引擎 Bullet 以支持游戏的物理特性。场景管理:通过场景、层、精灵三层主要结构,对游戏的场景树进行创建和销毁管理。

3,cocos2dx CCFileUtils 或者CCDictionary如何读取文件

在cocos2d-x中可以用.plist格式的文件来保存数据,它是XML文件格式的一种,在cocos2d-x解析.plist方面相关的资料比较少,但本身也很简单,要解析.plist文件可以参考cocos2d-x类库中的CCSpriteFrameCache类和CCParticleSystem类,它主要是使用CCDictionary类来对.plist文件进行操作。
下面有一个.plist文件:





level1

bg_far_scene

path
images/far_scene.png
pos
{358, 309}

bg_near_scene

path
images/near_scene.png
pos
{360, 100}






读取.plist文件的代码如下:

const char* testPlistPath = "BSPlistDatas\\test.plist";
const char* fullPath = CCFileUtils::sharedFileUtils()->fullPathFromRelativeFile("test.plist", testPlistPath);
CCDictionary* plistDic = CCDictionary::createWithContentsOfFile(testPlistPath);

CCDictionary* levelDic = dynamic_cast(plistDic->objectForKey("level1"));
CCDictionary* farScene = dynamic_cast(levelDic->objectForKey("bg_far_scene"));
CCString* farScenePath = dynamic_cast(farScene->objectForKey("path"));
CCPoint point = CCPointFromString(farScene->valueForKey("pos")->getCString());

CCLog("path = %s", farScenePath->getCString());
CCLog("pos = %f, %f", point.x, point.y);


第一行是.plist文件的相对路径,通过CCFileUtils类获得文件中绝对路径后,使用CCDictionary::createWithContensOfFile(filePath);将文件中内容加载到CCDictionary数据结构的内存中,然后通过xxxForKey获得相应的key下的value。
这里需要注意的是,当在读取'pos'的时候,它的值一个{x, y}的字符串,这是.plist文件中的数组存储规则,我们可以通过cocos2d-x提供函数api将这样的字符串转化为CCpoint对象。
CCPoint point = CCPointFromString(farScene->valueForKey("pos")->getCString());

上面这句话就是做了这样的一个转化的过程,同样的cocos2d-x还支持CCSize、CCRect的字符串的转化。他们转化的方法以及在.plist中对应的字符串格式如下:
CCPoint: CCPointFromString();{x, y}
CCSize: CCSizeFromString();{w, h}
CCRect: CCSizeFromString();{x, y, w, h}
这样我们2D游戏所初始化所需要的数据都基本上够用了,可以尝试将游戏的初始数据放在.plist中,然后修改调整数值就可以直接修改plist文件,而无需重新编译程序了,从而实现游戏数据和游戏逻辑的分离。

4,如何在cocos2d c++代码中调用lua以及探究

如何在cocos2d c++代码中调用lua以及探究,有需要的朋友可以参考下。

如何在cocos2d c++代码中调用lua

在AppDelegate 中加入了
#include"Lua_extensions_CCB.h"
#include"CCLuaEngine.h"
#include"Lua_web_socket.h"

查到代码加载lua脚步引擎
官方原话注册引擎
CCLuaEngine*pEngine=CCLuaEngine::defaultEngine();
CCScriptEngineManager::sharedManager()->setScriptEngine(pEngine);

和ccb有关的lua
CCLuaStack*pStack=pEngine->getLuaStack();
lua_State*tolua_s=pStack->getLuaState();
tolua_extensions_ccb_open(tolua_s);

和web_socket 相关的lua
pStack=pEngine->getLuaStack();
tolua_s=pStack->getLuaState();
tolua_web_socket_open(tolua_s);


pEngine->executeScriptFile("luaScript/controller.lua");
结束


打开luaScript/controller.lua仔细研究


-- avoidmemory leak
collectgarbage("setpause",100)
collectgarbage("setstepmul",5000)

require"luaScript/mainMenu"
----------------


-- run
local scene =CCScene:create()
scene:addChild(CreateTestMenu())
CCDirector:sharedDirector():runWithScene(scene)

到这里如果熟悉cocos2dx 的朋友就很熟悉了
不错,这里是cocos2d中lua的使用方法和c++中调用差别不大!

但是还没有完

Cocos2dx 对lua的封装是很好的!


如果不熟悉c++与lua的绑定的代码下面的不建议看
C++与lua的绑定传送门

关于cocos2d 与 lua绑定的代码的探究

//打开"CCLuaEngine.h"

单例实现CCScripEngineProtocol
后期应该支持不仅仅只是lua的脚本引擎

头文件有很多方法

挑一个看看
virtualintexecuteNodeEvent(CCNode*pNode,intnAction);

intCCLuaEngine::executeNodeEvent(CCNode*pNode,intnAction)
{
intnHandler=pNode->getScriptHandler();
if(!nHandler)return0;

switch(nAction)
{
casekCCNodeOnEnter:
m_stack->pushString("enter");
break;

casekCCNodeOnExit:
m_stack->pushString("exit");
break;

casekCCNodeOnEnterTransitionDidFinish:
m_stack->pushString("enterTransitionFinish");
break;

casekCCNodeOnExitTransitionDidStart:
m_stack->pushString("exitTransitionStart");
break;

casekCCNodeOnCleanup:
m_stack->pushString("cleanup");
break;

default:
return0;
}
intret=m_stack->executeFunctionByHandler(nHandler,1);
m_stack->clean();
returnret;
}

这里是进入CCNode后的一些消息函数的处理

不管
intret=m_stack->executeFunctionByHandler(nHandler,1);

最终是回到了CCLuaStack

调用了executeFunctionByHandler(nHandler,1);

继续探究

intCCLuaStack::executeFunctionByHandler(intnHandler,intnumArgs)
{
intret=0;
if(pushFunctionByHandler(nHandler)) /* L: ... arg1 arg2 ... func */
{
if(numArgs>0)
{
lua_insert(m_state,-(numArgs+1)); /* L: ... func arg1 arg2 ... */
}
ret=executeFunction(numArgs);
}
lua_settop(m_state,0);
returnret;
}

可以看到一些和lua与c++联系的代码了

看看这个类的初始化

boolCCLuaStack::init(void)
{
m_state=lua_open();
luaL_openlibs(m_state);
tolua_Cocos2d_open(m_state);
toluafix_open(m_state);

// Register our version of the global "print"function
constluaL_regglobal_functions[]={
{"print",lua_print},
{NULL,NULL}
};
luaL_register(m_state,"_G",global_functions);
tolua_CocoStudio_open(m_state);
#if(CC_TARGET_PLATFORM==CC_PLATFORM_IOS||CC_TARGET_PLATFORM==CC_PLATFORM_MAC)
CCLuaObjcBridge::luaopen_luaoc(m_state);
#endif
register_all_cocos2dx_manual(m_state);
register_all_cocos2dx_extension_manual(m_state);
register_all_cocos2dx_studio_manual(m_state);
// add cocos2dx loader
addLuaLoader(cocos2dx_lua_loader);

returntrue;
}

这个里的方法看名称应该是注册 coco2dx 中的类到
C++中

register_all_cocos2dx_manual(m_state);
register_all_cocos2dx_extension_manual(m_state);
register_all_cocos2dx_studio_manual(m_state);

详细看
Coco2dx-studio 先不看

头文件
lua_cocos2dx_manual.h

#ifdef__cplusplus
extern"C"{
#endif
#include"tolua++.h"
#ifdef__cplusplus
}
#endif

LUA_APIintregister_all_cocos2dx_manual(lua_State*tolua_S);

头文件
lua_cocos2dx_extensions_manual
#ifdef__cplusplus
extern"C"{
#endif
#include"tolua++.h"
#ifdef__cplusplus
}
#endif

LUA_APIintregister_all_cocos2dx_extension_manual(lua_State*tolua_S);

惊人的相似
看看tolua++.h
真相快水落石出了

这里定义了lua所以用到全部函数

这里是头部,
/* tolua
** Support code for Lua bindings.
** Written by Waldemar Celes
** TeCGraf/PUC-Rio
** Apr 2003
** $Id: $
*/

/* This code is free software; you can redistributeit and/or modify it.
** The software provided hereunder is on an"as is" basis, and
** the author has no obligation to providemaintenance, support, updates,
** enhancements, or modifications.
*/

原来tolua也是lua封装起来的函数库,大师2003 4月就写好了
相当的牛

好上面只看了lua_cocos2dx_extensions_manual.h的头文件
cpp文件我们也一看详情
我发现注册了一些函数
但是不是全部

在CCLuaStack::init()
方法里还有
tolua_Cocos2d_open(m_state);
这个方法
相应的头文件是LuaCocos2d..h
可以打开看看详情

Luacocos2d..cpp注册了n多函数
我用注册是相对于lua而言

Luacocos2d.cpp代码贼多
有兴趣的童鞋可以看看

看来什么时间要看看cocos2d studio 的代码
紧跟时代的步伐
不能老是cocos builder

5,如何重启lua环境或重启引擎

第一步:看cocos2dx调用lua的最初切入点:

[cpp] view plain copy
bool AppDelegate::applicationDidFinishLaunching()
{
CCDirector *pDirector = CCDirector::sharedDirector();
pDirector->setOpenGLView(CCEGLView::sharedOpenGLView());
CCEGLView::sharedOpenGLView()->setDesignResolutionSize(480, 320, kResolutionNoBorder);
pDirector->setDisplayStats(true);
pDirector->setAnimationInterval(1.0 / 60);

// register lua engine
CCLuaEngine* pEngine = CCLuaEngine::defaultEngine();//从这里开始了lua旅程。
CCScriptEngineManager::sharedManager()->setScriptEngine(pEngine);//保存刚才新建的lua引擎对象,以便别处调用。

std::string path = CCFileUtils::sharedFileUtils()->fullPathForFilename("hello.lua");//CCFileUtils工具类一定封装了文件的搜索路径。
//接下来直接执行了脚本,跟句helloCpp工程的实现,这里本该是类似
//CCScene *pScene = HelloWorld::scene();
//pDirector->runWithScene(pScene);
//这样的代码,但这里并没有这样的代码,可以猜测:hello.lua中一定是实现了类似这样的一些功能,事实上,一定是这样。
//---因为需要添加的这些东西scene、other nodes都是一些c++类的对象,
//既然hello.lua能完成这些工作,那么lua也一定是有能力访问并操作了这些类与对象,
//换句话说,也就是一定存在一种机制,让c++暴漏一些接口供lua调用,
//亦即:lua可以访问cocos2dx里面的东西,并且,一定封装的很好用,否则没人用了。
pEngine->executeScriptFile(path.c_str());
return true;
}

第二步:看看CCLuaEngine到底干了点啥

[cpp] view plain copy
class CCLuaEngine : public CCScriptEngineProtocol
{
public:
static CCLuaEngine* defaultEngine(void);
virtual ~CCLuaEngine(void);
virtual ccScriptType getScriptType() {
return kScriptTypeLua;
};
CCLuaStack *getLuaStack(void) {
return m_stack;
}
//-----------new in me 1
virtual void addSearchPath(const char* path);
//-----------new in me 2
virtual void addLuaLoader(lua_CFunction func);
//----------------------------inherit from CCScriptEngineProtocol------------------
//==================这些函数好像都是纯虚函数在父类中===========================
//--------下面这几个函数基本都是调用【CCLuaStack *m_stack;】的成员方法来实现的
virtual void removeScriptObjectByCCObject(CCObject* pObj);
virtual void removeScriptHandler(int nHandler);
virtual int reallocateScriptHandler(int nHandler);
virtual int executeString(const char* codes);
virtual int executeScriptFile(const char* filename);
virtual int executeGlobalFunction(const char* functionName);
//--------------------------------end--------------------------------
virtual int executeNodeEvent(CCNode* pNode, int nAction);
virtual int executeMenuItemEvent(CCMenuItem* pMenuItem);
virtual int executeNotificationEvent(CCNotificationCenter* pNotificationCenter, const char* pszName);
virtual int executeCallFuncActionEvent(CCCallFunc* pAction, CCObject* pTarget = NULL);
virtual int executeSchedule(int nHandler, float dt, CCNode* pNode = NULL);
virtual int executeLayerTouchesEvent(CCLayer* pLayer, int eventType, CCSet *pTouches);
virtual int executeLayerTouchEvent(CCLayer* pLayer, int eventType, CCTouch *pTouch);
virtual int executeLayerKeypadEvent(CCLayer* pLayer, int eventType);
virtual int executeAccelerometerEvent(CCLayer* pLayer, CCAcceleration* pAccelerationValue);
virtual int executeEvent(int nHandler, const char* pEventName, CCObject* pEventSource = NULL, const char* pEventSourceClassName = NULL);
int executeTableViewEvent(int nEventType,cocos2d::extension::CCTableView* pTableView,void* pValue = NULL, CCArray* pResultArray = NULL);
virtual int executeEventWithArgs(int nHandler, CCArray* pArgs);
virtual bool handleAssert(const char *msg);
virtual bool parseConfig(CCScriptEngineProtocol::ConfigType type, const std::string& str);
//----------------------------inherit from CCScriptEngineProtocol end--------------
private:
CCLuaEngine(void)
: m_stack(NULL)
{}
bool init(void);

static CCLuaEngine* m_defaultEngine;
CCLuaStack *m_stack;
};

第三步:CCLuaEngine类中有一个指针成员变量m_stack,我们先来看看它的定义,注意下CCLuaStack和CCLuaEngine的区别于联系

[cpp] view plain copy
class CCLuaStack : public CCObject
{
public:
static CCLuaStack *create(void);
static CCLuaStack *attach(lua_State *L);
lua_State* getLuaState(void) {
return m_state;
}
virtual void addSearchPath(const char* path);
virtual void addLuaLoader(lua_CFunction func);
virtual void removeScriptObjectByCCObject(CCObject* pObj);
virtual void removeScriptHandler(int nHandler);
virtual int reallocateScriptHandler(int nHandler);
virtual int executeString(const char* codes);
virtual int executeScriptFile(const char* filename);
virtual int executeGlobalFunction(const char* functionName);

virtual void clean(void);
virtual void pushInt(int intValue);
virtual void pushFloat(float floatValue);
virtual void pushBoolean(bool boolValue);
virtual void pushString(const char* stringValue);
virtual void pushString(const char* stringValue, int length);
virtual void pushNil(void);
virtual void pushCCObject(CCObject* objectValue, const char* typeName);
virtual void pushCCLuaValue(const CCLuaValue& value);
virtual void pushCCLuaValueDict(const CCLuaValueDict& dict);
virtual void pushCCLuaValueArray(const CCLuaValueArray& array);
virtual bool pushFunctionByHandler(int nHandler);
virtual int executeFunction(int numArgs);
virtual int executeFunctionByHandler(int nHandler, int numArgs);
virtual int executeFunctionReturnArray(int nHandler,int nNumArgs,int nNummResults,CCArray* pResultArray);
virtual bool handleAssert(const char *msg);
protected:
CCLuaStack(void)
: m_state(NULL)
, m_callFromLua(0)
{}
bool init(void);
bool initWithLuaState(lua_State *L);

lua_State *m_state;
int m_callFromLua;
};

6,为什么cocos2dx不封装一套开源成熟的服务器端的框架

因为websocket是一个完整的应用层协议,而传统socket只是一套接口标准,所谓的封装socket,几乎是千人千面,这样的轮子已经造的够多了cocos2dx是一款游戏引擎,在把游戏引擎该做的做好之前,像网络这种模块,如果不是因为确实影响到开发者的使用,几乎可以不去考虑,毕竟不是引擎的部分,到头来还是各家自己封自己的,它毕竟跟游戏引擎关联不到,既然这样,那考虑方便和易用性的角度来看,封装一个完整的应用层协议肯定比去动socket要容易做的多。

7,cocos2dx3.10 怎么运行cocos2dx库

一、通用准备工作

1、安装Cocos2d-x 3.1

在Cocos2d官网上下载 Cocos2d-x 3.2+引擎 ,下载后解压缩。

2、安装Eclipse与Android SDK

这个在Mac上或是PC上开发都是可以通用的。

Eclipse 在其官网下载( 官网地址 )。

Android SDK 在Android开发者中心下载( 地址 )。

Eclipse是开发Android需要用到的IDE。这是个很牛的IDE,有许多插件让他变得三头六臂。要开发Android的程序,需要下载相关的插件,但如果每个插件要自己配置,会是很蛋痛的事情。

如果是新手,推荐使用:ADT Bundle。这是Eclipse+Android SDK的合体,所有的项目都已经帮你配置好了。

3、安装JDK

Eclipse需要Java环境才能运行。如果事先没有安装Java环境,则会报错。

解决方案安装jdk( 下载地址 )。

一般来说安装之后会自动配置好环境变量。如果还没有解决问题,请查找网络上关于JDK安装的攻略,很多的。

4、安装CDT插件 ( 下载地址 )

这是个Eclipse的插件,用来支持Eclipse中C/C++语言的开发。

从Eclipse的官网下载,下载之后,将features和plusins这两个文件夹里面的内容复制到Ecplise安装目录下对应的文件夹之后就可以了。

5、安装NDK ( 下载地址 )

这是进行C/C++与Java混合编译的必要工具。记下下载之后解压到的目录,因为到之后的安装中会用到。

6、安装ANT ( 下载地址 )

Cocos的Android开发需要用到它,所以下载下来安装好吧。

二、PC环境下配置过程

1、安装VS2012 ( 官方地址 )

网上还有很多其他下载地址。

最好是2012,我曾经试过2010,2013,都会出这样那样的问题。所以,2012!

2、安装python 2.7.6 ( 下载地址 )

因为Cocos2d-x的安装程序是用phthon写的,所以需要这个软件。不要下载python3.0以上的版本,否则运行会出错。如果是Mac,那么天生就自带了。

3、进行开发环境配置

以上的工作完成之后,就可以进行配置了。启动Windows的命令行(CMD)工具。进入Cocos2d-x 3.1的安装目录,执行:

python setup.py
Cocos2d-x 3.1版本使用这个setup.py来安装,十分方便。执行之后会让你配置上面准备工作中所安装的:ANT、NDK、SDK等目录,把安装到哪儿去了填写进入就行。

4、建立自己的项目

用setup.py配置好Cocos2d-x的环境之后,你的命令行中就会多如“cocos”的命令,新建项目将使用这个命令进行。示例:

cocos new hello(项目名称)-p com.hello(包名字)-l cpp(项目类型) -d E:\MyCocos\cocos2d(目录)
新建的项目会把所有的源文件和库都拷到你的项目目录中。所以新建的项目文件会很大,有许多人怀疑这个的必要性,不过到你之后的开发中就会知道这种配置方法是对的了。

项目建立好之后,就可以开发了:

A、进行VS2012的开发。

找到你的项目目录下的:proj.win32,打开里面的解决方案就行。剩下的就是你的任务了。一般来说,直接就可以运行。

B、进行Android的开发。

使用Eclipse中的项目导入,导入proj.android中的项目方案。导入之后,因为SDK的问题,一般无法启动,关于这个问题,以及其它的问题,请参见(四、其它问题解决方案)。

三、MAC环境下配置过程

1、注册苹果开发者账号 ( 注册地址 )

如果不使用真机,使用模拟器调试,那么有开发者账号应该就足够了。

如果要使用真机调试,需要购买IOS开发者会员,688RMB一年。我看到之前的攻略说要99美元,但是看现在的页面的的提示,应该只要有网银就可以支付了。网上的攻略写得非常复杂,说要下载证书什么什么的,现在统统都不需要了,XCode全部为您代劳了,只要照提示一路点同意就行。

2、安装XCode

在你的开发者首页下面就有XCode的下载。通过App Store下载安装即可。

请使用最新的XCode(需要OS X 10.8以上系统支持),并使用App Store安装。我的MacBook Air从朋友那里拿来时还是10.7,因为下载总是中断,屡次不成功,所以用XCode 4.6,但好像不通过App Store安装会出这样那样的问题。所以强烈推荐使用最新的版本。

3、进行开发者环境配置。

与PC的配置一样,打开MAC的终端程序,执行setup.py,配置好各种SDK的路径就行。但MAC需要再加上一句:

source /Users/yourname/.bash_profile
这是用来刷新配置文件的。

4、建立项目文件

使用命令行建立。

如果你像我一样用两个平台(PC与MAC)开发,可以共享同一个项目目录。我的项目文件是放在PC上的,MAC通过共享访问项目文件。

项目建立好之后就可以开发了。MAC下的配置相对简单,使用XCode打开项目目录下的proj.ios_mac下的项目配置文件就行。之后基本不会出错的。

四、其它问题解决方案

Eclipse与Android相关:

问题 :SDK错误

因为Cocos2d-x的模版默认是使用Android 2.3.3(API-10),如果新安装的ADT Bundle或Android SDK,是API-19,则会出现错误,解决方案是通过Android SDK中的管理工具(SDK Manager)下载Android 2.3.3的SDK。

问题 :Project 'XXX' is missing required source folder: 'gen'

这个问题就是上面的SDK错误导致的。

问题 :undefined reference to 'cocos2d::network::HttpClient::getInstance()'

我是使用网络库(network)的时候出现这个错误的。如果你使用其它库,解决方案是一样的。原因是缺少库的引用。解决方案是在Android.mk里面增加:

LOCAL_WHOLE_STATIC_LIBRARIES += cocos_network_static

Cocos2d-x的开发者已经在Android.mk里面加上了很多这种路径,平时是注释掉的。您要使用时把这些增加上去就行。

问题 :fatal error: cocos-ext.h: No such file or directory

问题分析:缺少头文件路径的引用

需要在:Android.mk里面增加

LOCAL_C_INCLUDES += $(LOCAL_PATH)/../../cocos2d/extensions

Cocos2d-x的开发者已经在Android.mk里面加上了很多这种路径,平时是注释掉的。您要使用时把这些增加上去就行。

问题 :The import org.cocos2dx.lib cannot be resolved。

无法找到指定的库文件。解决的方案是增加路径的引用:Project Properties -> Java Build Path -> Source and then linking “项目目录/cocos/platform/android/java/src”

VS2012相关:

问题 :“extensions/ExtensionMacros.h”: No such file or directory

无法打开包括文件。

1、解决方案中,添加“现有项目”--> libExtensions 具体目录: ..\cocos2d\extensions\proj.win32\libExtensions.vcxproj

2、项目中添加引用-->libExtensions

3、通过:属性->C/C++->附加包含目录。附加包含目录:$(EngineRoot)

如果你使用其它的文件,解决方案是一样的。1、增加项目的引用。2、附加头文件的包含目录。

当遇到COCOS2DX 3.2+版本创建权限问题时:

首先,打开终端cd到目录 /cocos2d-x-3.2/tools/cocos2d-console/bin 下, 运行 cocos.py 脚本创建文件。

[javascript] view plaincopy

./cocos.py new HelloWorldDemo -p com.coco2dx.org -l cpp -d ~/Desktop
参数说明:

HelloWorldDemo为项目名称

-p 后面接包名

-l 后面接开发语言类型,有cpp, lua, js三种类型

-d 后面接项目存放的目录

如果出现 -bash: ./cocos.py: Permission denied ,是因为没有权限。 用命令 chmod 修改一下目录下的 cocos.py 权限就可以了

[cpp] view plaincopy

chmod u+x cocos.py

8,cocos2dx怎么用

Cocos2d-x是一个开源的移动2D游戏框架,MIT许可证下发布的。这是一个C++ Cocos2d-iPhone项目的版本。Cocos2d-X发展的重点是围绕Cocos2d跨平台,Cocos2d-x提供的框架。
手机游戏,可以写在C++或者Lua中,使用API是Cocos2d-iPhone完全兼容。Cocos2d-x项目可以很容易地建立和运行在iOS,Android,黑莓Blackberry等操作系统中。Cocos2d-x还支持Windows、Mac和Linux等桌面操作系统,因此,开发者编写的源代码很容易在桌面操作系统中编辑和调试。

cocos2d-x主要功能:

流程控制(Flow control):非常容易地管理不同场景(scenes)之间的流程控制。

精灵(Sprites):快速而方便的精灵。

动作(Actions):告诉精灵们该做什么。可组合的动作如移动(move)、旋转(rotate)和缩放(scale)等更多。

特效(Effects):特效包括波浪(waves)、旋转(twirl)和透镜(lens)等更多。

平面地图(Tiled Maps):支持包括矩形和六边形平面地图。

转换(Transitions):从一个场景移动到另外一个不同风格的场景。

菜单(Menus):创建内部菜单。
文本渲染(Text Rendering):支持标签和HTML标签动作。
文档(Documents):编程指南 + API参考 + 视频教学 + 很多教你如何使用的简单测试例子。

BSD许可:尽管用就是了。

基于Pyglet:没有外部的依赖。

基于OpenGL:支持硬件加速。


cocos2d-x基本介绍:

Cocos2d-x是MIT许可证下发布的开源游戏引擎,游戏开发快速、简易、功能强大。2015年2月,触控科技正式推出了游戏开发一站式解决方案cocos,将Cocos 2d-x、Cocos Studio、Cocos Code IDE等框架及工具整合在一起。


Cocos2d-x核心优势在于允许开发人员利用C++、Lua及Javascript来进行跨平台部署,覆盖平台包括iOS、Android、Windows Phone、Windows, Mac OSX 3及Tizen等等,省事省力省成本。


Cocos2d-x用户不仅包括个人开发者和游戏开发爱好者,还包括许多知名大公司如Zynga、Wooga、Gamevil、Glu、GREE、Konami、TinyCo、HandyGames、IGG及Disney Mobile等。截止2013年9月,全球基于Cocos2d-x引擎的游戏下载量高达逾15亿,其中许多还占据苹果应用商店(AppStore)和谷歌应用商店(Google Play)排行榜。同时许多公司如触控、谷歌、微软、ARM、英特尔的工程师在Cocos2d-x领域也非常活跃。

另外,Cocos2d-x版本升级困难的问题,是许多开发者的一大苦恼,而经过整合的cocos,解决了Cocos2d-x的这一问题。升级cocos,其相匹配的Cocos2d-x也将自动进行升级,这极大的提高了开发效率,为开发者们带来便利,同时也为Cocos2d-x的进一步发展打下基础。


cocos2d-x特点:

易于使用:游戏开发者可以把关注焦点放在游戏设置本身,而不必消耗大量时间学习晦涩难懂的OpenGL ES,此外,Cocos2d-x还提供了大量的规范。
高效:Cocos2d-x基于OpenGL ES进行图形渲染,从而让移动设备的GPU性能发挥到极致。

灵活:方便扩展,易于集成第三方库。

免费:基于MIT协议的免费开源框架,用户可以放心使用,不用担心商业授权的问题。

社区支持:关心Cocos2d-x开发者自发建立了多个社区组织,可以方便查阅各类技术资料

9,Cocos Creator 和 Cocos2d-x Js 之间到底是啥关系

没什么关系,虽然语言都是js但是开发模式不一样。
cocos2d-x js只是语言是js,如果熟悉cocos2d引擎的话,你会觉得用c++还是js还是lua开发起来差不多。
但是cocos creator开发起来有点像u3d,而且开发模式、api和cocos2d里面的也有一些区别。所以你要是学的话学一种就可以了,推荐是cocos creator吧,毕竟现在他们精力也都在这个上面。而且代码、界面、打包一气呵成。

精华总结

雨露,是万物生长的灵丹妙药,它能让万物欣欣向荣,给人带来希望和欢乐。起名,是给孩子取名最重要的一步,因为名字,在某种程度上就是一种文化。一个好的名字,可以让孩子从小拥有一个好的起点。那么,旸字取名呢,有着什么样的寓意及含义?

1、旸是五行金之字,五行属水,寓意孩子聪明机智,有大智慧,富有爱心。

根据五行属性来取名,金能克水,就像是金被水淹没了,所以会出现水变少,阳气不充足的情况。而旸字五行属水,表示有希望的样子,寓意孩子聪明机智,有大智慧,富有爱心,有爱心之义,对人非常友好,人缘非常好。由于在起名时需要注意五行八字,所以名字要避开太多不利因素。例如孩子取名为旸这个名字时,可选择五行属金且与水相冲或水火相济或金水相济等字面寓意相搭。

2、旸字是木之金之字,五行属木,为金之态,寓意孩子金木水火土五行协调,和谐发展。

雨露的滋润,日出而作,日落而息,都让人感到无比满足。旸,字音shèng,寓意着孩子有一颗包容和感恩之心。这与“日出而作、日落而息”有异曲同工之妙……旸给人带来欢乐、吉祥的同时,也寓意着孩子金木水火土协调发展……

3、旸是一种很有灵性的字,可形容孩子生机勃勃,乐观向上。

【旸】有光明、温暖、明朗的意思,可用作名字。【阳凯是太阳之意。【阳阳阳】阳代表明亮,阳代表光明及温暖。用阳代表光明的事物,表示孩子生机勃勃,乐观向上。【阳欣可表示欣欣向荣之意。【阳和】可表示温暖的意思。

4、旸字取名,寓意孩子乐观向上,对生活充满希望。

旸字寓意孩子乐观向上,对生活充满希望,乐观积极的生活态度,有助于提高孩子的自信心。另外旸字取名还有着积极向上、乐观开朗、吉祥幸福、生活美满、幸福美满等美好祝愿,其寓意吉祥。而且旸在中国汉字里是非常多见的一个字,我们可以将这个字用在名字中来表达。旸字取名代表着孩子未来很美好而充满希望。如果将其用于起名中,则代表着孩子未来会有很多希望。同时也象征着孩子将来会有所成就。

5、旸作为名字有吉祥富贵之意。

旸这个名字,在很早的时候就被赋予了吉祥富贵的寓意,因为它在名字中的意思很多。所以有很高的吉祥富贵之意。这个名字将孩子命名为【旸】具有美好的寓意。

上一篇:道路交通指示牌

下一篇:男装服装品牌