这篇文章主要围绕cocoside调试cocos2dxv3.9和js详解展开,旨在为您提供一份详细的参考资料。我们将全面介绍cocoside调试cocos2dxv3.9的优缺点,解答js详解的相关问题,
这篇文章主要围绕cocos ide 调试cocos2dx v3.9和js详解展开,旨在为您提供一份详细的参考资料。我们将全面介绍cocos ide 调试cocos2dx v3.9的优缺点,解答js详解的相关问题,同时也会为您带来
- cocos ide 调试cocos2dx v3.9(js)详解(cocos2dx4.0教程)
关于cocos2dx接Android sdk的一些坑 - Bullet(Cocos2dx)之交叉编译Android,集成到cocos2dx3.x
- cocos2d-x lua 屏幕适配问题(OpenGL调用),版本号(cocos2dx v3.4)
- Cocos2d-x教程(19)-cocos2d-x.xcodeproj-2.2.x版本对cocos2dx文件的引用以及Cocos2d-x 2.2.0版本后项目拷贝出来无法运行的原因
cocos ide 调试cocos2dx v3.9(js)详解(cocos2dx4.0教程)
打从 cocos2d-js 和cocos2d-x合并后,ide不能很方便的调试js代码了。再也没有自带的模拟器了。现在需要自己构建模拟器才可以。但直接使用cocoside构建的模拟器,因为是release版本,代码里面cc.log这类输出在控制台中是无法显示的,所以需要自己构建一个debug版本的模拟器。
前期准备:
cocoside 1.2版本
python 2.7.5以上版本
vs2013
cocos引擎(银色小图标,名字就叫Cocos)
jdk,ndk,ant,sdk(这些网上已经有很详细的介绍了,不累赘讲)
这里只讲怎么构建自己的debug模拟器。
安装奥vs2013
安装好cocos引擎后,在工具->Cocos框架 里面下载cocos Framework 3.9,然后安装.
查看安装好后的路径,在frameworks/cocos2d-x-3.9/tools/simulator/frameworks/runtime-src/proj.win32/。用vs2013打开simulator.sln。
然后在vs2013里面进行编译,可能时间比较长,如果编译成功,会在\frameworks\cocos2d-x-3.9\tools\simulator\runtime\win32\里面生成simulator.exe.
打开cocoside,窗口-> 首选项->cocos。进行配置
然后打开Cocos,选中Framework Mode 将Framework选项设置为3.9的路径
然后点击工具栏上的
打开界面如下
选中Windows7/windows8 模拟器路径就是上面所生成的simulator.exe。
创建cocos2d-x-3.9的项目,然后导入到cocoside,如果上述配置都没问题,则可以运行成功。
关于cocos2dx接Android sdk的一些坑
简单说说UI线程 :在Android中,有个非常重要的家伙非常霸道,那就是UI线程。这霸道之一:不能被阻塞。 之二:系统对每一个组件的调用都从UI线程分发出去。
简单说说openGL线程:但凡cocos2dx 启动的绘制线程都是openGL线程。就这么多
任何SDK界面的调用,必须从UI线程中调用,所以需要放到主线程中。如果我们直接从GL线程中调用,轻则调用不了,重者程序蹦死。
解决办法:
得到主线程的handler,这里简单说一种,就是在onCreate中new一个静态handler。
或者new Handler(Looper.getMainLooper()),且叫mainHandler吧,
启动一个线程,
Thread sendThread=new Thread(new Runnable(){ public void run() { mainHandler.post(sendRun); } });
public Runnable sendRun=new Runnable() { @Override public void run() { // //这里就可以调用sdk里面的东西了
} };
</pre><pre name="code"><span>如何从UI线程中调用OpenGL线程呢,直接调用,我以前也干过,感觉没什么问题被发现(he he),如果发现了问题我觉得还是这么调用的好</span>
</pre><pre name="code">Cocos2dxGLSurfaceView.getInstance().queueEvent(new Runnable() { public void run() { <span> </span>//回调什么马的 } });至于想知道,jni native什么的 还请出门右拐,不送
Bullet(Cocos2dx)之交叉编译Android,集成到cocos2dx3.x
首先将src文件夹复制到jni文件夹,没有可以新建一个
新建两个文件Android.mk,Application.mk
Application.mk内容如下:
APP_ABI:=armeabiarmeabi-v7ax86
APP_PLATFORM:=android-8
APP_STL:=stlport_static
Android.mk内容如下:
LOCAL_PATH:=$(callmy-dir)
include$(CLEAR_VARS)
LOCAL_MODULE :=bullet_static(可随便起)
LOCAL_MODULE_FILENAME:=libbullet(可随便起)
LOCAL_C_INCLUDES:=src/(头文件位置)
(源文件,要列出所有用到的,这里用到BulletSoftBodyBulletDynamics
BulletCollisionsLinearMath)
LOCAL_SRC_FILES := src/BulletSoftBody/btSoftBody.cpp\ src/BulletSoftBody/btSoftBodyConcaveCollisionAlgorithm.cpp \ src/BulletSoftBody/btSoftBodyHelpers.cpp \ src/BulletSoftBody/btSoftBodyRigidBodyCollisionConfiguration.cpp \ src/BulletSoftBody/btSoftRigidCollisionAlgorithm.cpp \ src/BulletSoftBody/btSoftRigidDynamicsWorld.cpp \ src/BulletSoftBody/btSoftSoftCollisionAlgorithm.cpp \ src/BulletSoftBody/btDefaultSoftBodySolver.cpp \ src/BulletDynamics/Character/btKinematicCharacterController.cpp \ src/BulletDynamics/ConstraintSolver/btConeTwistConstraint.cpp \ src/BulletDynamics/ConstraintSolver/btContactConstraint.cpp \ src/BulletDynamics/ConstraintSolver/btFixedConstraint.cpp \ src/BulletDynamics/ConstraintSolver/btGearConstraint.cpp \ src/BulletDynamics/ConstraintSolver/btGeneric6DofConstraint.cpp \ src/BulletDynamics/ConstraintSolver/btGeneric6DofSpringConstraint.cpp \ src/BulletDynamics/ConstraintSolver/btGeneric6DofSpring2Constraint.cpp \ src/BulletDynamics/ConstraintSolver/btHinge2Constraint.cpp \ src/BulletDynamics/ConstraintSolver/btHingeConstraint.cpp \ src/BulletDynamics/ConstraintSolver/btPoint2PointConstraint.cpp \ src/BulletDynamics/ConstraintSolver/btSequentialImpulseConstraintSolver.cpp \ src/BulletDynamics/ConstraintSolver/btNNCGConstraintSolver.cpp \ src/BulletDynamics/ConstraintSolver/btSliderConstraint.cpp \ src/BulletDynamics/ConstraintSolver/btSolve2LinearConstraint.cpp \ src/BulletDynamics/ConstraintSolver/btTypedConstraint.cpp \ src/BulletDynamics/ConstraintSolver/btUniversalConstraint.cpp \ src/BulletDynamics/Dynamics/btdiscreteDynamicsWorld.cpp \ src/BulletDynamics/Dynamics/btRigidBody.cpp \ src/BulletDynamics/Dynamics/btSimpleDynamicsWorld.cpp \ src/BulletDynamics/Vehicle/btRaycastVehicle.cpp \ src/BulletDynamics/Vehicle/btWheelInfo.cpp \ src/BulletDynamics/Featherstone/btMultiBody.cpp \ src/BulletDynamics/Featherstone/btMultiBodyConstraintSolver.cpp \ src/BulletDynamics/Featherstone/btMultiBodyDynamicsWorld.cpp \ src/BulletDynamics/Featherstone/btMultiBodyJointLimitConstraint.cpp \ src/BulletDynamics/Featherstone/btMultiBodyConstraint.cpp \ src/BulletDynamics/Featherstone/btMultiBodyPoint2Point.cpp \ src/BulletDynamics/Featherstone/btMultiBodyJointMotor.cpp \ src/BulletDynamics/MLcpsolvers/btDantzigLCP.cpp \ src/BulletDynamics/MLcpsolvers/btMLcpsolver.cpp \ src/BulletDynamics/MLcpsolvers/btLemkeAlgorithm.cpp \ src/BulletCollision/broadphaseCollision/btAxisSweep3.cpp \ src/BulletCollision/broadphaseCollision/btbroadphaseProxy.cpp \ src/BulletCollision/broadphaseCollision/btCollisionAlgorithm.cpp \ src/BulletCollision/broadphaseCollision/btDbvt.cpp \ src/BulletCollision/broadphaseCollision/btDbvtbroadphase.cpp \ src/BulletCollision/broadphaseCollision/btdispatcher.cpp \ src/BulletCollision/broadphaseCollision/btMultiSapbroadphase.cpp \ src/BulletCollision/broadphaseCollision/btOverlappingPairCache.cpp \ src/BulletCollision/broadphaseCollision/btQuantizedBvh.cpp \ src/BulletCollision/broadphaseCollision/btSimplebroadphase.cpp \ src/BulletCollision/Collisiondispatch/btActivatingCollisionAlgorithm.cpp \ src/BulletCollision/Collisiondispatch/btBoxBoxCollisionAlgorithm.cpp \ src/BulletCollision/Collisiondispatch/btBox2dBox2dCollisionAlgorithm.cpp \ src/BulletCollision/Collisiondispatch/btBoxBoxDetector.cpp \ src/BulletCollision/Collisiondispatch/btCollisiondispatcher.cpp \ src/BulletCollision/Collisiondispatch/btCollisionObject.cpp \ src/BulletCollision/Collisiondispatch/btCollisionWorld.cpp \ src/BulletCollision/Collisiondispatch/btCollisionWorldImporter.cpp \ src/BulletCollision/Collisiondispatch/btCompoundCollisionAlgorithm.cpp \ src/BulletCollision/Collisiondispatch/btCompoundCompoundCollisionAlgorithm.cpp \ src/BulletCollision/Collisiondispatch/btConvexConcaveCollisionAlgorithm.cpp \ src/BulletCollision/Collisiondispatch/btConvexConvexAlgorithm.cpp \ src/BulletCollision/Collisiondispatch/btConvexPlaneCollisionAlgorithm.cpp \ src/BulletCollision/Collisiondispatch/btConvex2dConvex2dAlgorithm.cpp \ src/BulletCollision/Collisiondispatch/btDefaultCollisionConfiguration.cpp \ src/BulletCollision/Collisiondispatch/btEmptyCollisionAlgorithm.cpp \ src/BulletCollision/Collisiondispatch/btGhostObject.cpp \ src/BulletCollision/Collisiondispatch/btHashedSimplePairCache.cpp \ src/BulletCollision/Collisiondispatch/btInternalEdgeUtility.cpp \ src/BulletCollision/Collisiondispatch/btManifoldResult.cpp \ src/BulletCollision/Collisiondispatch/btSimulationIslandManager.cpp \ src/BulletCollision/Collisiondispatch/btSphereBoxCollisionAlgorithm.cpp \ src/BulletCollision/Collisiondispatch/btSphereSphereCollisionAlgorithm.cpp \ src/BulletCollision/Collisiondispatch/btSphereTriangleCollisionAlgorithm.cpp \ src/BulletCollision/Collisiondispatch/btUnionFind.cpp \ src/BulletCollision/Collisiondispatch/SphereTriangleDetector.cpp \ src/BulletCollision/CollisionShapes/btBoxShape.cpp \ src/BulletCollision/CollisionShapes/btBox2dShape.cpp \ src/BulletCollision/CollisionShapes/btBvhTriangleMeshShape.cpp \ src/BulletCollision/CollisionShapes/btCapsuleShape.cpp \ src/BulletCollision/CollisionShapes/btCollisionShape.cpp \ src/BulletCollision/CollisionShapes/btCompoundShape.cpp \ src/BulletCollision/CollisionShapes/btConcaveShape.cpp \ src/BulletCollision/CollisionShapes/btConeshape.cpp \ src/BulletCollision/CollisionShapes/btConvexHullShape.cpp \ src/BulletCollision/CollisionShapes/btConvexInternalShape.cpp \ src/BulletCollision/CollisionShapes/btConvexPointCloudShape.cpp \ src/BulletCollision/CollisionShapes/btConvexpolyhedron.cpp \ src/BulletCollision/CollisionShapes/btConvexShape.cpp \ src/BulletCollision/CollisionShapes/btConvex2dShape.cpp \ src/BulletCollision/CollisionShapes/btConvexTriangleMeshShape.cpp \ src/BulletCollision/CollisionShapes/btCylinderShape.cpp \ src/BulletCollision/CollisionShapes/btEmptyShape.cpp \ src/BulletCollision/CollisionShapes/btHeightfieldTerrainShape.cpp \ src/BulletCollision/CollisionShapes/btMinkowskiSumShape.cpp \ src/BulletCollision/CollisionShapes/btMultimaterialTriangleMeshShape.cpp \ src/BulletCollision/CollisionShapes/btMultiSphereShape.cpp \ src/BulletCollision/CollisionShapes/btOptimizedBvh.cpp \ src/BulletCollision/CollisionShapes/btpolyhedralConvexShape.cpp \ src/BulletCollision/CollisionShapes/btScaledBvhTriangleMeshShape.cpp \ src/BulletCollision/CollisionShapes/btShapeHull.cpp \ src/BulletCollision/CollisionShapes/btSphereShape.cpp \ src/BulletCollision/CollisionShapes/btStaticPlaneshape.cpp \ src/BulletCollision/CollisionShapes/btStridingMeshInterface.cpp \ src/BulletCollision/CollisionShapes/btTetrahedronShape.cpp \ src/BulletCollision/CollisionShapes/btTriangleBuffer.cpp \ src/BulletCollision/CollisionShapes/btTriangleCallback.cpp \ src/BulletCollision/CollisionShapes/btTriangleIndexVertexArray.cpp \ src/BulletCollision/CollisionShapes/btTriangleIndexVertexMaterialArray.cpp \ src/BulletCollision/CollisionShapes/btTriangleMesh.cpp \ src/BulletCollision/CollisionShapes/btTriangleMeshShape.cpp \ src/BulletCollision/CollisionShapes/btUniformScalingShape.cpp \ src/BulletCollision/Gimpact/btContactProcessing.cpp \ src/BulletCollision/Gimpact/btGenericPoolAllocator.cpp \ src/BulletCollision/Gimpact/btGImpactBvh.cpp \ src/BulletCollision/Gimpact/btGImpactCollisionAlgorithm.cpp \ src/BulletCollision/Gimpact/btGImpactQuantizedBvh.cpp \ src/BulletCollision/Gimpact/btGImpactShape.cpp \ src/BulletCollision/Gimpact/btTriangleShapeEx.cpp \ src/BulletCollision/Gimpact/gim_Box_set.cpp \ src/BulletCollision/Gimpact/gim_contact.cpp \ src/BulletCollision/Gimpact/gim_memory.cpp \ src/BulletCollision/Gimpact/gim_tri_collision.cpp \ src/BulletCollision/NarrowPhaseCollision/btContinuousConvexCollision.cpp \ src/BulletCollision/NarrowPhaseCollision/btConvexCast.cpp \ src/BulletCollision/NarrowPhaseCollision/btGjkConvexCast.cpp \ src/BulletCollision/NarrowPhaseCollision/btGjkEpa2.cpp \ src/BulletCollision/NarrowPhaseCollision/btGjkEpaPenetrationDepthSolver.cpp \ src/BulletCollision/NarrowPhaseCollision/btGjkPairDetector.cpp \ src/BulletCollision/NarrowPhaseCollision/btMinkowskiPenetrationDepthSolver.cpp \ src/BulletCollision/NarrowPhaseCollision/btPersistentManifold.cpp \ src/BulletCollision/NarrowPhaseCollision/btRaycastCallback.cpp \ src/BulletCollision/NarrowPhaseCollision/btSubSimplexConvexCast.cpp \ src/BulletCollision/NarrowPhaseCollision/btVoronoiSimplexSolver.cpp \ src/BulletCollision/NarrowPhaseCollision/btpolyhedralContactClipping.cpp \ src/LinearMath/btAlignedAllocator.cpp \ src/LinearMath/btConvexHull.cpp \ src/LinearMath/btConvexHullComputer.cpp \ src/LinearMath/btGeometryUtil.cpp \ src/LinearMath/btPolarDecomposition.cpp \ src/LinearMath/btQuickprof.cpp \ src/LinearMath/btSerializer.cpp \ src/LinearMath/btVector3.cpp
最后还要加上一句,表示生成静态库如果将STATIC该文SHARED则生成动态库
include$(BUILD_STATIC_LIBRARY)
然后进入命令行
进入jni所在目录
ndk-build
等待编译完成
将三个目录下的libbullet.a分别复制到cocos2dx的安装目录下的
安装目录\Cocos\frameworks\cocos2d-x\prebuilt\android\相应文件下
进入Cocos\frameworks\cocos2d-x\external
新建文件夹Bullet,在Bullet下新建prebuild-mk
将Box2D\prebuild-mk下的Android.mk复制到Bullet/prebuild-mk
修改如下3行
LOCAL_MODULE:=bullet_static
LOCAL_MODULE_FILENAME:=libbullet
LOCAL_SRC_FILES:=../../../prebuilt/android/$(TARGET_ARCH_ABI)/libbullet.a
复制头文件
将bullet3的src的所有文件复制到新建的Bullet文件下
删除不是.h的所有文件
下一步任务繁重,
将所有用到BulletCollisionBulletDynamicsBulletSoftBodyLinearMath目录下的include都加上Bullet/,可以使用Notepad++在Bullet目录搜索Bullet,并替换为Bullet/Bullet,LinearMath并替换为Bullet/LinearMath
进入Cocos\frameworks\cocos2d-x\cocos\prebuilt-mk
在Android.mk
在LOCAL_WHOLE_STATIC_LIBRARIES+=Box2d_static下面添加
LOCAL_WHOLE_STATIC_LIBRARIES+=bullet_static
$(callimport-module,Box2D/prebuilt-mk)下面添加
$(callimport-module,Bullet/prebuilt-mk)
至此已经完成编译静态库
下载地址
cocos2d-x lua 屏幕适配问题(OpenGL调用),版本号(cocos2dx v3.4)
前言
我们知道,cocos2dx 中屏幕适配的设置方法是
Director::getInstance()->getopenGLView()->setDesignResolutionSize(960,640,kResolutionShowAll);
为了保持我们的游戏不被拉伸,选择showAll方法。但是有一个问题,showAll会留黑边,那么我们只需要在openGL中渲染黑边即可。这样黑边就会被填充为我们自己设置的图片。话不多说,看看下面的代码。
MainScene.lua
调用示例如下,只需要在onEnter里面渲染即可
function MainScene:onEnter() local function createSpriteWithPathPosScale(path,pos,scale) -- body local sprite = cc.Sprite:create(path) sprite : setAnchorPoint(cc.p(0,0)) sprite : setPosition(pos) sprite : setScale(scale) return sprite end local layer = cp.ScreenMatchLayer : create() layer:retain() local sprite = createSpriteWithPathPosScale("ui_img_left.jpg",cc.p(0 - 88,0),1) layer : getChildByName("_node") : addChild(sprite) sprite = createSpriteWithPathPosScale("ui_img_left.jpg",cc.p(960,-1) layer : getChildByName("_node") : addChild(sprite) sprite = createSpriteWithPathPosScale("ui_img_top.jpg",cc.p(480,640 + 32.5),1) layer : getChildByName("_node") : addChild(sprite) sprite = createSpriteWithPathPosScale("ui_img_top.jpg",-480-32.5),-1) layer : getChildByName("_node") : addChild(sprite) end
AppDelegate.cpp
这里面对ScreenMatchLayer进行注册以便被lua调用
bool AppDelegate::applicationDidFinishLaunching() { // set default FPS Director::getInstance()->setAnimationInterval(1.0 / 60.0f); // register lua module auto engine = LuaEngine::getInstance(); ScriptEngineManager::getInstance()->setScriptEngine(engine); lua_State* L = engine->getLuaStack()->getLuaState(); lua_module_register(L); ScreenMatchLayer::lua_bind_AllFunction(L); // If you want to use Quick-Cocos2d-X,please uncomment below code // register_all_quick_manual(L); LuaStack* stack = engine->getLuaStack(); stack->setXXTEAKeyAndSign("2dxLua",strlen("2dxLua"),"XXTEA",strlen("XXTEA")); //register custom function //LuaStack* stack = engine->getLuaStack(); //register_custom_function(stack->getLuaState()); #if (COCOS2D_DEBUG > 0) && (CC_CODE_IDE_DEBUG_SUPPORT > 0) // NOTE:Please don't remove this call if you want to debug with Cocos Code IDE RuntimeEngine::getInstance()->start(); cocos2d::log("iShow!"); #else if (engine->executeScriptFile("src/main.lua")) { return false; } #endif return true; }
ScreenMatchLayer.h
#ifndef __SCREENMATCHLAYER_H__ #define __SCREENMATCHLAYER_H__ #include "cocos2d.h" namespace cocos2d{ class ScreenMatchLayer : public Layer { public: ScreenMatchLayer(void); ~ScreenMatchLayer(void); static ScreenMatchLayer* create(); bool init(); void visit(Renderer *renderer,const Mat4& parentTransform,uint32_t parentFlags); void onBeforeVisit(); void onAfterVisit(); static int lua_bind_AllFunction(lua_State* tolua_S); static const std::string classprefix; static const std::string fullName; static const std::string className; private: Node* _node; CustomCommand _beforeVisit; CustomCommand _afterVisit; }; } int lua_cocos2dx_ScreenMatchLayer_create(lua_State* tolua_S); #endif
ScreenMatchLayer.cpp
#include "ScreenMatchLayer.h" #include "tolua_fix.h" #include "LuaBasicConversions.h" using namespace cocos2d; const std::string ScreenMatchLayer::classprefix = "cp"; const std::string ScreenMatchLayer::className = "ScreenMatchLayer"; const std::string ScreenMatchLayer::fullName = classprefix + "." + className; ScreenMatchLayer::ScreenMatchLayer(void) { } ScreenMatchLayer::~ScreenMatchLayer(void) { } bool ScreenMatchLayer::init() { if ( !Layer::init() ) { return false; } _node = Node::create(); _node->setName("_node"); _node->setAnchorPoint(ccp(0,0)); addChild(_node); GLView* openGLView = this->_director->getopenGLView(); Size frameSize = openGLView->getFrameSize(); Size designSize = Size(960,640); Size nodeSize = Size(0,0); bool frameSizeWidthLarger = (designSize.width / designSize.height) < (frameSize.width / frameSize.height ); if(frameSizeWidthLarger) { nodeSize.height = designSize.height; nodeSize.width = nodeSize.height * (frameSize.width / frameSize.height); } else { nodeSize.width = designSize.width; nodeSize.height = nodeSize.width * (frameSize.height / frameSize.width); } _node->setPosition(ccp((nodeSize.width - designSize.width) / 2,(nodeSize.height - designSize.height) / 2)); auto _afterDrawListener = EventListenerCustom::create(Director::EVENT_AFTER_VISIT,[this](EventCustom* event) { this->visit(this->_director->getRenderer(),Mat4::IDENTITY,0); }); auto eventdispatcher = Director::getInstance()->getEventdispatcher(); eventdispatcher->addEventListenerWithFixedPriority(_afterDrawListener,1); return true; } void ScreenMatchLayer::onBeforeVisit() { GLView* openGLView = this->_director->getopenGLView(); Size frameSize = openGLView->getFrameSize(); glViewport((GLint)(0),(GLint)(0),(GLsizei)(frameSize.width),(GLsizei)(frameSize.height)); } void ScreenMatchLayer::onAfterVisit() { GLView* openGLView = this->_director->getopenGLView(); Size designSize = openGLView->getDesignResolutionSize(); openGLView->setViewPortInPoints(0,designSize.width,designSize.height); } void ScreenMatchLayer::visit(Renderer *renderer,uint32_t parentFlags) { if(!_visible) return; _beforeVisit.init(_globalZOrder); _beforeVisit.func = CC_CALLBACK_0(ScreenMatchLayer::onBeforeVisit,this); renderer->addCommand(&_beforeVisit); Node::visit(renderer,parentTransform,parentFlags); _afterVisit.init(_globalZOrder); _afterVisit.func = CC_CALLBACK_0(ScreenMatchLayer::onAfterVisit,this); renderer->addCommand(&_afterVisit); } ScreenMatchLayer * ScreenMatchLayer::create() { ScreenMatchLayer *pRet = new ScreenMatchLayer(); if ( pRet && pRet->init() ) { pRet->autorelease(); return pRet; } CC_SAFE_DELETE(pRet); return nullptr; } int ScreenMatchLayer::lua_bind_AllFunction(lua_State* tolua_S) { lua_getglobal(tolua_S,"_G"); if (lua_istable(tolua_S,-1))//stack:...,_G,{ tolua_open(tolua_S); tolua_module(tolua_S,classprefix.c_str(),0); tolua_beginmodule(tolua_S,classprefix.c_str()); tolua_usertype(tolua_S,ScreenMatchLayer::fullName.c_str()); tolua_cclass(tolua_S,className.c_str(),ScreenMatchLayer::fullName.c_str(),"cc.Layer",nullptr); tolua_beginmodule(tolua_S,className.c_str()); tolua_function(tolua_S,"create",lua_cocos2dx_ScreenMatchLayer_create); tolua_endmodule(tolua_S); g_luaType[typeid(ScreenMatchLayer).name()] = ScreenMatchLayer::fullName; g_typeCast[className] = ScreenMatchLayer::fullName; tolua_endmodule(tolua_S); } lua_pop(tolua_S,1); return 1; } int lua_cocos2dx_ScreenMatchLayer_create(lua_State* tolua_S) { int argc = 0; ScreenMatchLayer* parentOfFunction = nullptr; const std::string &functionString = "'lua_cocos2dx_ScreenMatchLayer_create'"; const std::string &luaFunctionString = ScreenMatchLayer::fullName + ":create"; #if COCOS2D_DEBUG >= 1 tolua_Error tolua_err; if (!tolua_isusertable(tolua_S,1,&tolua_err)) { tolua_error(tolua_S,("#ferror in function " + functionString).c_str(),&tolua_err); return 0; } parentOfFunction = (ScreenMatchLayer*)tolua_tousertype(tolua_S,0); if (!parentOfFunction) { //tolua_error(tolua_S,("invalid 'cobj' in function " + functionString).c_str(),nullptr); //return 0; } #endif argc = lua_gettop(tolua_S) - 1; if (argc == 0) { ScreenMatchLayer* ret = ScreenMatchLayer::create(); object_to_luaval<ScreenMatchLayer>(tolua_S,(ScreenMatchLayer*)ret); return 1; } else {luaL_error(tolua_S,"%s has wrong number of arguments: %d,was expecting %d \n",luaFunctionString.c_str(),argc,1);} return 0; }
Cocos2d-x教程(19)-cocos2d-x.xcodeproj-2.2.x版本对cocos2dx文件的引用以及Cocos2d-x 2.2.0版本后项目拷贝出来无法运行的原因
欢迎加入 Cocos2d-x 交流群:193411763
转载时请注明原文地址:http://blog.csdn.net/u012945598/article/details/17954549
今天在使用Cocos2d-x 2.2.1版本中的"curl.h"头文件时遇到了一个问题
提示文件没有找到。
之后笔者对比了一下Cocos2d-x 2.1.5版本,发现在2.1.5的版本中cocos2dx文件(curl文件夹位于cocos2dx文件夹目录下)是以groups(黄色文件夹)的形式存在于项目中的,而在2.2.x版本中采用了新的引入方式,也就是我们所见到的cocos2d-x.xcodeproj
(不理解groups形式请参考http://blog.csdn.net/u012945598/article/details/17955215)
2.1.5版本:
2.2.x版本:
这也就解释了,为什么在2.2.0之后的版本中,如果将你的项目拷贝到了别的电脑上,项目将无法运行的原因。
因为2.2.0之后的版本中,cocos2dx文件夹不再存在于项目的目录下了,而是位于你的系统中的某个位置(下载完之后扔哪了就是哪),当编译器对cocos2dx文件做路径搜索时,会按照创建项目的机器中的cocos2dx文件的路径去搜索,而在另外一台电脑中,路径是不一样的,所以自然会找不到。搜索路径如下图:
我们常用的解决办法就是新建一个项目,将之前项目的Classes文件夹与Resources文件夹拷贝出来,再重新添加到项目中。
从形式上来说,在2.1.5版本中的cocos2dx的文件夹的作用与2.2.x版本中的cocos2dx.xcodeproj的作用是相同的,因为他们都是对cocos2d-x文件夹目录下的cocos2dx文件中的源码的引用。但是在使用过程中,又略有一些区别。
由于在2.1.5的版本中cocos2dx文件是以groups的形式被添加到项目中的,所以在使用的时候,我们可以没有任何顾忌的引用文件中的任何头文件 #include "xxx.h",原因我们在之前的参考文章中已经提过,是因为以groups形式添加到项目中的文件都是会被编译的。
编译的资源文件位置位于Compile Sources如下图:
然而还有一部分文件仍然是以引用的方式存在于项目中,类似于 curl.h,这些文件在使用的过程中并不能直接通过#include "xxx.h"方式获取到它们的头文件,而是要通过其上级目录索引到,例如我们要使用curl文件夹中curl.h的头文件:
#include "curl/curl.h"
又或者我们需要使用到platform中的CCThread类,需要引入头文件
#include "platform/CCThread"
若不加上级目录,就会出现文章开篇中的错误,这就是Cocos2d-x-2.1.5版本与2.2.x版本中cocos2dx中源码使用的区别
关于cocos ide 调试cocos2dx v3.9和js详解的问题就给大家分享到这里,感谢你花时间阅读本站内容,更多关于
本文标签: