在最新的cocos集成环境中,CocosStudio已经集成到cocos中了,至于界面的制作和编辑器的基本使用在cocos官网有详细教程,
这里就不细说,资源下载和详情请参看官网教程:http://cn.cocos2d-x.org/tutorial/show?id=1650
接下来就是使用cocos2d-x3.4完成接下来的代码操作与打包,一步一步来。
1、cocos2d-x3.4环境问题,cocos2d-x3.4对NDK的要求是最新的,这里我使用的是r10d。如果使用eclipse进行打包,需要
eclipse版本在23以上,这里我是用的是2014年7月2号的版本(Eclipse IDE for Android Developers 23.0.2.1259578 )。
相应的SDKcocos2d-x3.4项目默认是20,(2014年7月2号的版本的ADT里面集成的SDK就是20)请自行下载。另外Python
和java请自行安装,并且配置好环境变量。建议新手直接下载cocosframeworks3.4进行安装,这样cocos相关的环境变量会自
动配置好。
2、使用eclipse进行android编译的还有一个重要的参数需要配置:NDK_MODULE_PATH,我嫌麻烦,直接配置在环境变量里。
3.4的这三个目录分别是cocos引擎根目录,external目录,和cocos目录,例如我的配置:
FrameWorks\frameworks\cocos2d-x-3.4rc1;D:\CocosFrameWorks\frameworks\cocos2d-x-3.4rc1\external;D:\CocosFrameWorks\frameworks\cocos2d-x-3.4rc1\cocos
3、接下来就是工程的创建和代码编写了,这里我使用c++开发,编辑器使用vs2013update4。
首先打开命令行窗口,使用cocos命令行创建工程:cocos new KissBear -p com.KissBear.cn -l cpp -d D:\cocosProjects
解释下命令参数:new是新建工程命令,-p是包名称,-l是开发语言,-d是工程存放目录
4、将cocosStudio导出的资源文件全部拷贝到工程目录下的Resources目录下。嗯,先看下cocosStudio的效果图:
1 /************************************************************************/ 2 /* 头文件:BearMainScene.h*/ 3 /************************************************************************/ 4 5 #ifndef __HELLOWORLD_SCENE_H__ 6 #define __HELLOWORLD_SCENE_H__ 7 8 #include "cocos2d.h" 9 #include "ui/CocosGUI.h" 10 USING_NS_CC; 11 using namespace cocos2d::ui; 12 13 class BearMainScene : public cocos2d::Layer 14 { 15 public: 16 static cocos2d::Scene* createScene(); 17 18 virtual bool init(); 19 20 21 CREATE_FUNC(BearMainScene); 22 23 public: 24 int GetRandNum(); 25 26 void update(float delta); //帧循环 27 void GetshowBear(); //获取要显示的小熊并且显示小熊 28 void setScore(); //设置分数 29 Vector<Node*> bearNodeArray; //存储所有的小熊列表 30 Node *alivebear; //当前显示的小熊 31 Sprite *sp_kiss; //嘴唇精灵 32 Text *scoreText; //分数控件 33 34 static float beginclock; //显示计时 35 int preBearNum; //上次显示的小熊编号 36 static float difftime; //显示时间差 37 static int totalScore; //总分数 38 }; 39 40 #endif // __HELLOWORLD_SCENE_H__
实现文件:
1 #include "BearKissScene.h" 2 #include "cocostudio/CocoStudio.h" 3 #include "ui/CocosGUI.h" 4 5 USING_NS_CC; 6 7 float BearMainScene::difftime = 1.5; 8 int BearMainScene::totalScore = 0; 9 float BearMainScene::beginclock = 0.0; 10 11 Scene* BearMainScene::createScene() 12 { 13 auto scene = Scene::create(); 14 auto layer = BearMainScene::create(); 15 scene->addChild(layer); 16 return scene; 17 } 18 19 bool BearMainScene::init() 20 { 21 if ( !Layer::init() ) 22 { 23 return false; 24 } 25 26 auto manilayer = CSLoader::createNode("MainScene.csb"); 27 this->addChild(manilayer); 28 29 char index[4]; 30 for (int i = 1; i < 10; i++) 31 { 32 std::string nodename = "ProjectNode_"; 33 memset(index, 0, sizeof(char) * 4); 34 sprintf(index, "%d", i); 35 nodename = nodename.append(index); 36 auto sp_w = manilayer->getChildByName(nodename); 37 bearNodeArray.pushBack(sp_w); 38 } 39 40 scoreText = (Text*)manilayer->getChildByName("Text_Score"); 41 setScore(); 42 43 sp_kiss = Sprite::create("m.png"); 44 sp_kiss->setVisible(false); 45 sp_kiss->setAnchorPoint(Vec2(0.5, 0.5)); 46 this->addChild(sp_kiss); 47 48 GetshowBear(); 49 50 //拉姆达表达式做碰撞监听 51 auto bearListener = EventListenerTouchOneByOne::create(); 52 bearListener->onTouchBegan = [&](Touch *touch, Event* event){ 53 auto bearrect = Rect(0, 0, alivebear->getContentSize().width, alivebear->getContentSize().height); 54 auto startpos = alivebear->convertToNodeSpace(touch->getLocation()); 55 56 if (bearrect.containsPoint(startpos) && alivebear->isVisible()) 57 { 58 sp_kiss->setVisible(false); 59 sp_kiss->setPosition(touch->getLocation()); 60 sp_kiss->setVisible(true); 61 totalScore += 100; 62 //如果显示时间间隔大于0.1秒,那么分数每增长1000分,时间差减去0.1,这样子,就会随着分数的提高难度增加 63 if (difftime != 0.1) 64 { 65 if (totalScore % 1000 == 0) 66 { 67 difftime -= 0.1; 68 } 69 } 70 71 setScore(); 72 } 73 74 return true; 75 }; 76 77 bearListener->onTouchMoved = [](Touch *touch, Event* event){ 78 }; 79 80 bearListener->onTouchEnded = [&](Touch *touch, Event* event){ 81 82 }; 83 84 _eventDispatcher->addEventListenerWithSceneGraphPriority(bearListener, alivebear); 85 86 this->scheduleUpdate(); 87 88 return true; 89 } 90 91 int BearMainScene::GetRandNum() 92 { 93 int num = 0; 94 while (1) 95 { 96 num = rand_0_1() * 10; 97 if (num >= 0 && num < 9) 98 { 99 break; 100 } 101 } 102 return num; 103 } 104 105 void BearMainScene::GetshowBear() 106 { 107 int idx = GetRandNum(); 108 while (idx == preBearNum) 109 { 110 idx = GetRandNum(); 111 } 112 preBearNum = idx; 113 std::string spritename = "Sp_bear"; 114 auto bearNode = bearNodeArray.at(idx); 115 alivebear = bearNode->getChildByName(spritename); 116 if (sp_kiss->isVisible()) 117 { 118 sp_kiss->setVisible(false); 119 } 120 alivebear->setVisible(true); 121 } 122 123 void BearMainScene::update(float delta) 124 { 125 beginclock += delta; 126 if (beginclock >= difftime) 127 { 128 beginclock = 0; 129 alivebear->setVisible(false); 130 GetshowBear(); 131 } 132 } 133 134 135 void BearMainScene::setScore() 136 { 137 char scorestr[10]; 138 memset(scorestr, 0, sizeof(scorestr)); 139 sprintf(scorestr, "%d", totalScore); 140 scoreText->setString(scorestr); 141 }
8、然后,修改appdelegate的glview属性:glview = GLViewImpl::createWithRect("MyKissBear", Rect(0, 0, 640, 960));
这里需要注意,如果想要跑WP8的工程createWithRect这个函数是没有的,需要使用setFrameSize去设置大小。
9、最后进入项目目录,打开命令行窗口:cocos run -p android -m release --ap-20 ,当然请把android手机连上电脑。这里需要
注意,这里编译的是release版本,是需要签名的,如果嫌麻烦,将release改成debug或者直接去掉,因为默认是debug版本编译的。
那么要签名的话,需要先生成签名文件,这里简单说下方法,同样进入项目目录,打开命令行窗口:keytool -genkey -alias demo.keystore -keyalg RSA -validity 3650 -keystore demo.keystore
demo.keystore是签名文件名称,RSA是加密方式,3650是有效天数,-alias是别名,还有个keysize,这里就不设置,默认就好。
签名文件生成之后,在执行前面的run命令,根据提示输入keystore路径,就好了。
10、如果使用ecliose编译,相关路径一定要配置好,我遇到的问题就是提示c++空指针,原因是因为我在首次打开eclipse是NDK路径
没有设置正确,即使NDK之后设置正确,打开也会报错,解决方法:删除android工程下的.cproject文件。
最后,上一张手机上的效果图:
好啦,到这里就结束了。