GVKun编程网logo

cocos ide 调试cocos2dx v3.9(js)详解(cocos2dx4.0教程)

26

这篇文章主要围绕cocoside调试cocos2dxv3.9和js详解展开,旨在为您提供一份详细的参考资料。我们将全面介绍cocoside调试cocos2dxv3.9的优缺点,解答js详解的相关问题,

这篇文章主要围绕cocos ide 调试cocos2dx v3.9js详解展开,旨在为您提供一份详细的参考资料。我们将全面介绍cocos ide 调试cocos2dx v3.9的优缺点,解答js详解的相关问题,同时也会为您带来 关于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教程)

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 随记> 关于cocos2dx接Android sdk的一些坑

关于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

Bullet(Cocos2dx)之交叉编译Android,集成到cocos2dx3.x

首先将src文件夹复制到jni文件夹,没有可以新建一个

新建两个文件Android.mkApplication.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


复制头文件

bullet3src的所有文件复制到新建的Bullet文件下


删除不是.h的所有文件

下一步任务繁重,

将所有用到BulletCollisionBulletDynamicsBulletSoftBodyLinearMath目录下的include都加上Bullet/,可以使用Notepad++Bullet目录搜索Bullet,并替换为Bullet/BulletLinearMath并替换为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)

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教程(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.9js详解的问题就给大家分享到这里,感谢你花时间阅读本站内容,更多关于 关于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版本后项目拷贝出来无法运行的原因等相关知识的信息别忘了在本站进行查找喔。

本文标签: