Cocos2dx学习笔记一

目录:

第一部分:Cocos2d-x介绍

第二部分:Windows 7环境下Visual Studio 2012中搭建Cocos2d-x 3.3beta0集成开发环境

第三部分:HelloWorld示例详解

 

一、        Cocos2d-x介绍

  1. 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等桌面操作系统,因此,开发者编写的源代码很容易在桌面操作系统中编辑和调试。
  2. 为什么使用这个游戏框架?

——它使用标准C和C++语音开发,跨平台性非常好,目前来说主流的平台它都支持。如:只需要写一份代码就可以在Android平台和IOS平台运行。目前我们所看见的几乎所有的2D游戏都是使用这个游戏框架来开发的(原因在于其API设计非常合理,使用非常方便)

  3. Cocos2d  -iPhone是使用objective C语音进行开发,只能运行在ios平台。

                Cocos2d-x是这个框架的一个C++语言版的实现,是跨平台的。

       Cocos2d-html5使用javascript语言开发。

  4. http://cocos2d-x.org/官网

  5. learn中可以看到开发人员的帮助文档http://cocos2d-x.org/wiki/Cocos2d-x

  6. Reference中可以看到该框架中每个类的说明http://www.cocos2d-x.org/reference/native-cpp/V3.3rc0/index.html

二、Windows 7环境下Visual Studio 2012中搭建Cocos2d-x 3.3beta0集成开发环境。

步骤:

  1. windows下Cocos2d-x 3.3beta0集成开发环境配置
  2. 创建并运行Cocos2d-x工程
  3. 如何把cocos2d-x程序编译成Android程序

需要的文件:

  1. cocos2d-x-3.3beta0.zip
  2. python-2.7.8.msi
  3. apache-ant-1.9.4-bin.zip
  4. adt-bundle-windows-x86_64-20140702.zip
  5. android-ndk-r9d-windows-x86_64.zip

(实际上还需要先安装好Eclipse和Visual Studio 2012并配置好相应环境变量)

(一) windows下Cocos2d-x 3.3beta0集成开发环境配置

1.  安装Python,设置环境变量(计算机—右键属性—高级系统设置—环境变量—用户变量)Path,添加路E:Cocos2DPython27,测试:cmd-python;

2.  将上面的几个压缩包解压到一个自定义安装目录中(需要注意的是路径不可以有空格,这是后面配置NDK的必要条件);

3.  cmd-进入cocos2d-x-3.3beta0路径,dir一下,然后运行setup.py

1)       配置NDK_ROOT(该路径绝对不可以有空格):

E:Cocos2Dadt-bundle-windows-x86_64-20140702android-ndk-r9d

(这个是我自己解压到adt-bundle-windows-x86_64-20140702中去的)

2)       配置ANDROID_SDK_ROOT:

E:Cocos2Dadt-bundle-windows-x86_64-20140702sdk

3)       配置ANT_ROOT:

E:Cocos2DCocos2Dapache-ant-1.9.4in

4.  测试:cmd-cocos;

 

(二)创建并运行Cocos2d-x工程

方法一:使用cocos2d-x-3.0beta2 oolsproject-creator中的create_project.py来创建

 

双击create_project.py

 

如图键入工程名、包名,选择工程路径和所使用的语言,单击creat按钮。

 

创建成功后可以在E:Cocos2Dcocos2dxHelloC++看到它有Android、mac、linux、win32平台,选择win32平台

 

双击打开HelloC++,使用Visual Studio 2012打开解决方案。并按F5运行。

 

 

方法二:在命令行中创建

1.  cmd-进入想要用来创建Cocos2d-x工程的目录(①e: ②cd E:Cocos2Dcocos2dx),使用cocos new HelloCC -l cpp -p com.jikexueyuan.hellocc -d .在当前目录下创建HelloCC工程,使用c++语言,包名为com.jikexueyuan.hellocc;

2.  创建完成后使用explorer .来打开用来创建Cocos2d-x工程的目录,打开proj.win32目录,双击HelloCC.sln使用Visual Studio 2012打开解决方案。

3.  在解决方案资源管器中打开Classes目录,双击HelloWorldScene.cpp,这就是程序源代码,按F5编译运行。

 

(三)把cocos2d-x程序编译成Android程序

1. 方法一cmd-进入想要编译成Android程序的Cocos2d-x工程HelloCC的目录(①e: ②

E:Cocos2Dcocos2dxHelloCC),使用cocos compile -p android编译直接生成apk;

在此过程中遇到的问题如下:

1)       报错“java 显示不是内部或外部命令,也不是可运行程序”,原因是java的环境变量没有设置好。新建系统变量JAVA_HOME,值为:e:Program FilesJavajdk1.7.0_67,然后在系统变量path里面增加%JAVA_HOME%in;

2)       报错“Unable to resolve project target 'android-10'”,意思是本机的安卓AVD版本没有Cocos2d-x工程指定的版本。解决方法是Download the API10 for Android, I did it from the Android SDK manager.

3)       另外遇到两个奇葩的问题,但不影响编译成apk:

①在一开始编译的时候会报错。我们使用cocos compile –p android>1.txt将编译信息放到1这个txt文本文件中。可以看到一开始的报错如下:

ERROR: SWT folder '' does not exist.

Please set ANDROID_SWT to point to the folder containing swt.jar for your platform.

 

网查原因为Android环境配置中出现了空格,测试cmd-android h是可以成功的:

 

②报错如下:

 

但是检查C:WindowsSystem32下的java.exe是没有问题的:

 

 

     以上这两个问题虽然一直出现,但不会影响编译成api,成功的截图如下:

 

编译成功。

Apk目录为E:Cocos2Dcocos2dxHelloCCindebugandroid,可直接将其发送到手机上安装运行,下图为在手机中运行的截图。

 

  1. 方法二 手动将本机代码编译成库,然后用Eclipse把它打包成Android应用程序。

1)       cmd-进入E:Cocos2Dcocos2dxHelloCCproj.android,执行build_native.py生成so文件。

2)       打开Eclipse(注意Eclipse的工作空间不能和myEclipse一致),import

E:Cocos2Dcocos2dxHelloCCproj.android(导入时就已经在执行编译的操作,此时cmd中也在编译,可将cmd关闭)。

 

 

如果导入Eclipse后报错:”Cocos2dxActivity cannot be resolved…”。解决的方法是将

E:Cocos2Dcocos2dxHelloCCcocos2dcocosplatformandroidjavasrc目录下的org目录(此为Android为我们提供的源代码)直接拖到Eclipse中的HelloCC的src目录下(-copy films and folders-yes),这样就将系统提供的类拷贝进来了。

3)       此时打开libs目录下可以看到它已经生成的本机库文件

 

Run as android application:

 

这种方法在Eclipse中运行有时成功有时失败,至今还没有找到原因。无妨,可以直接用前一种方法自动生成APK文件。

三、    HelloWorld示例详解

在Visual Studio 2012打开项目解决方案

  1. 应用程序的开始方法:

 

bool AppDelegate::applicationDidFinishLaunching() {

    // initialize director

    auto director = Director::getInstance();//获取一个Director:

    auto glview = director->getOpenGLView();//创建一个EGLView来呈现图形

    if(!glview) {

        glview = GLViewImpl::create("My Game");

        director->setOpenGLView(glview);

    }

    // turn on display FPS

    director->setDisplayStats(true);// 设置是否呈现帧频数据

    // set FPS. the default value is 1.0/60 if you don't call this

    director->setAnimationInterval(1.0 / 60);// 设置帧频

    // create a scene. it's an autorelease object

    auto scene = HelloWorld::createScene();//创建Scene(场景)

    // run

director->runWithScene(scene);// 开始执行,启动这个场景(启动后就可以呈现内容)

    return true;

}

  2. class HelloWorld : public cocos2d::Layer

 

class HelloWorld : public cocos2d::Layer

{// HelloWorld是一个layer类,继承自layer,其父级容器是一个scene

public:

    // there's no 'id' in cpp, so we recommend returning the class instance pointer

    static cocos2d::Scene* createScene();//创建scene

    // Here's a difference. Method 'init' in cocos2d-x returns bool, instead of returning 'id' in cocos2d-iphone

    virtual bool init(); 

   

    // a selector callback

    void menuCloseCallback(cocos2d::Ref* pSender);

   

    // implement the "static create()" method manually

    CREATE_FUNC(HelloWorld);

};

  3. Scene* HelloWorld::createScene()

 

Scene* HelloWorld::createScene()

{

    // 'scene' is an autorelease object

    auto scene = Scene::create();//创建一个scene

   

    // 'layer' is an autorelease object

    auto layer = HelloWorld::create();//创建一个layer

    // add layer as a child to scene

    scene->addChild(layer);//将layer添加到scene中

    // return the scene

    return scene;//将scene实例返回

}

原文地址:https://www.cnblogs.com/qianqianjun/p/4579409.html