目录:
第一部分:Cocos2d-x介绍
第二部分:Windows 7环境下Visual Studio 2012中搭建Cocos2d-x 3.3beta0集成开发环境
第三部分:HelloWorld示例详解
一、 Cocos2d-x介绍
- 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等桌面操作系统,因此,开发者编写的源代码很容易在桌面操作系统中编辑和调试。
- 为什么使用这个游戏框架?
——它使用标准C和C++语音开发,跨平台性非常好,目前来说主流的平台它都支持。如:只需要写一份代码就可以在Android平台和IOS平台运行。目前我们所看见的几乎所有的2D游戏都是使用这个游戏框架来开发的(原因在于其API设计非常合理,使用非常方便)
3. Cocos2d -iPhone是使用objective C语音进行开发,只能运行在ios平台。
Cocos2d-x是这个框架的一个C++语言版的实现,是跨平台的。
Cocos2d-html5使用javascript语言开发。
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集成开发环境。
步骤:
- windows下Cocos2d-x 3.3beta0集成开发环境配置
- 创建并运行Cocos2d-x工程
- 如何把cocos2d-x程序编译成Android程序
需要的文件:
- cocos2d-x-3.3beta0.zip
- python-2.7.8.msi
- apache-ant-1.9.4-bin.zip
- adt-bundle-windows-x86_64-20140702.zip
- android-ndk-r9d-windows-x86_64.zip
(实际上还需要先安装好Eclipse和Visual Studio 2012并配置好相应环境变量)
(一) windows下Cocos2d-x 3.3beta0集成开发环境配置
1. 安装Python,设置环境变量(计算机—右键属性—高级系统设置—环境变量—用户变量)Path,添加路E:\Cocos2D\Python27,测试:cmd-python;
2. 将上面的几个压缩包解压到一个自定义安装目录中(需要注意的是路径不可以有空格,这是后面配置NDK的必要条件);
3. cmd-进入cocos2d-x-3.3beta0路径,dir一下,然后运行setup.py
1) 配置NDK_ROOT(该路径绝对不可以有空格):
E:\Cocos2D\adt-bundle-windows-x86_64-20140702\android-ndk-r9d
(这个是我自己解压到adt-bundle-windows-x86_64-20140702中去的)
2) 配置ANDROID_SDK_ROOT:
E:\Cocos2D\adt-bundle-windows-x86_64-20140702\sdk
3) 配置ANT_ROOT:
E:\Cocos2D\Cocos2D\apache-ant-1.9.4\bin
4. 测试:cmd-cocos;
(二)创建并运行Cocos2d-x工程
方法一:使用cocos2d-x-3.0beta2\tools\project-creator中的create_project.py来创建
双击create_project.py
如图键入工程名、包名,选择工程路径和所使用的语言,单击creat按钮。
创建成功后可以在E:\Cocos2D\cocos2dx\HelloC++看到它有Android、mac、linux、win32平台,选择win32平台
双击打开HelloC++,使用Visual Studio 2012打开解决方案。并按F5运行。
方法二:在命令行中创建
1. cmd-进入想要用来创建Cocos2d-x工程的目录(①e: ②cd E:\Cocos2D\cocos2dx),使用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:\Cocos2D\cocos2dx\HelloCC),使用cocos compile -p android编译直接生成apk;
在此过程中遇到的问题如下:
1) 报错“java 显示不是内部或外部命令,也不是可运行程序”,原因是java的环境变量没有设置好。新建系统变量JAVA_HOME,值为:e:\Program Files\Java\jdk1.7.0_67\,然后在系统变量path里面增加%JAVA_HOME%\bin;
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:\Windows\System32下的java.exe是没有问题的:
以上这两个问题虽然一直出现,但不会影响编译成api,成功的截图如下:
编译成功。
Apk目录为E:\Cocos2D\cocos2dx\HelloCC\bin\debug\android,可直接将其发送到手机上安装运行,下图为在手机中运行的截图。
- 方法二 手动将本机代码编译成库,然后用Eclipse把它打包成Android应用程序。
1) cmd-进入E:\Cocos2D\cocos2dx\HelloCC\proj.android,执行build_native.py生成so文件。
2) 打开Eclipse(注意Eclipse的工作空间不能和myEclipse一致),import
E:\Cocos2D\cocos2dx\HelloCC\proj.android(导入时就已经在执行编译的操作,此时cmd中也在编译,可将cmd关闭)。
如果导入Eclipse后报错:”Cocos2dxActivity cannot be resolved…”。解决的方法是将
E:\Cocos2D\cocos2dx\HelloCC\cocos2d\cocos\platform\android\java\src目录下的org目录(此为Android为我们提供的源代码)直接拖到Eclipse中的HelloCC的src目录下(-copy films and folders-yes),这样就将系统提供的类拷贝进来了。
3) 此时打开libs目录下可以看到它已经生成的本机库文件
Run as android application:
这种方法在Eclipse中运行有时成功有时失败,至今还没有找到原因。无妨,可以直接用前一种方法自动生成APK文件。
三、 HelloWorld示例详解
在Visual Studio 2012打开项目解决方案
- 应用程序的开始方法:
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实例返回 } |