在最新的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文件。
最后,上一張手機上的效果圖:
好啦,到這里就結束了。