先看最終實現的效果圖:
創建以人物選擇場景 ChooseHero.h
#ifndef __CHOOSE_HERO_H__ #define __CHOOSE_HERO_H__ #include "cocos2d.h" #include "ui/CocosGUI.h" #include "cocos-ext.h" #include "cocostudio/CocoStudio.h" using namespace cocos2d::ui; USING_NS_CC; class ChooseHero : public Layer { public: static Scene * createScene(); virtual bool init(); void OnGameStartPage(Object *pSender, Widget::TouchEventType type);//創建人物 void textFieldEvent(Object* pSender, Event type); //void OnBackToLoginPage(Object *pSender, Event type);//返回登錄界面 void OnRoleSelect(CCObject *pSender, Widget::TouchEventType type);//角色選擇界面 void OnRoleSelect2(CCObject *pSender, Widget::TouchEventType type);//角色選擇界面 void OnRoleSelect3(CCObject *pSender, Widget::TouchEventType type);//角色選擇界面 bool OnRoleSelectMy(Touch *touch, Event *event); CREATE_FUNC(ChooseHero); protected: //標籤 enum { enTagStudioMainUiLayer, enTagRole, }; intm_nRoleID;//角色ID 1.鳴人2.小櫻3.佐助 int btnIndex2; Button* pBtn_Role ; Button* pBtn_Role2; Button* pBtn_Role3; ImageView * pSelect_Img ; ImageView * pSelect_Img2; ImageView * pSelect_Img3; }; #endif
init實現如下:
bool ChooseHero::init(){ if (!Layer::init()){ return false; } m_nRoleID = 1; //創建主場景UI層 auto pCreateNinja = GUIReader::getInstance()->widgetFromJsonFile("CreateNinja.json"); addChild(pCreateNinja, 100, enTagStudioMainUiLayer); pCreateNinja->setName("CreateNinjaLayer"); pCreateNinja->setSize(getContentSize()); ArmatureDataManager::getInstance()->addArmatureFileInfo("armature/xiaoyin.ExportJson"); ArmatureDataManager::getInstance()->addArmatureFileInfo("armature/NewProject.ExportJson"); ArmatureDataManager::getInstance()->addArmatureFileInfo("armature/minren1.ExportJson"); ////獲取開始按鈕 Button *pBtn_Create_Team = dynamic_cast<Button*>(pCreateNinja->getChildByName("MainUi")->getChildByName("Btn_Create_Team")); pBtn_Create_Team->addTouchEventListener(this, toucheventselector(ChooseHero::OnGameStartPage)); ////獲取輸入框 TextField* pTextField = dynamic_cast<TextField*>(pCreateNinja->getChildByName("MainUi")->getChildByName("Team_Name_TextField")); //CC_BREAK_IF(pTextField == NULL); pTextField->setTouchEnabled(true); //pTextField->addEventListenerTextField(this, textfieldeventselector(CNFTeamCreateLayer::textFieldEvent)); pTextField->setText(""); //獲取人物按鈕 pBtn_Role = static_cast<Button*>(pCreateNinja->getChildByName("MainUi")->getChildByName(String::createWithFormat("Btn_Char_%d", 0 + 1)->getCString())); pBtn_Role2 = static_cast<Button*>(pCreateNinja->getChildByName("MainUi")->getChildByName(String::createWithFormat("Btn_Char_%d", 1 + 1)->getCString())); pBtn_Role3 = static_cast<Button*>(pCreateNinja->getChildByName("MainUi")->getChildByName(String::createWithFormat("Btn_Char_%d", 2 + 1)->getCString())); pSelect_Img = static_cast<ImageView*>(pBtn_Role->getChildByName("Select_Img")); pSelect_Img2 = static_cast<ImageView*>(pBtn_Role2->getChildByName("Select_Img")); pSelect_Img3 = static_cast<ImageView*>(pBtn_Role3->getChildByName("Select_Img")); pBtn_Role->addTouchEventListener(this, toucheventselector(ChooseHero::OnRoleSelect)); pBtn_Role2->addTouchEventListener(this, toucheventselector(ChooseHero::OnRoleSelect2)); pBtn_Role3->addTouchEventListener(this, toucheventselector(ChooseHero::OnRoleSelect3)); pSelect_Img->setVisible(true); ArmatureDataManager::getInstance()->addArmatureFileInfo("armature/xiaoyin.ExportJson"); ArmatureDataManager::getInstance()->addArmatureFileInfo("armature/NewProject.ExportJson"); ArmatureDataManager::getInstance()->addArmatureFileInfo("armature/minren1.ExportJson"); char cName[3][256] = { "minren1", "xiaoyin", "NewProject" }; Armature *pRole = Armature::create(cName[0]); pRole->setPosition(ccp(640/ 2, 210)); pRole->setAnchorPoint(ccp(pRole->getAnchorPoint().x, 0)); pRole->getAnimation()->play("hold"); addChild(pRole, 100000, enTagRole); return true; }
回調方法實現如下:
void ChooseHero::OnRoleSelect(CCObject *pSender, Widget::TouchEventType type){ if (pBtn_Role == pSender){ pSelect_Img2->setVisible(false); pSelect_Img3->setVisible(false); pSelect_Img->setVisible(true); m_nRoleID = 1; removeChildByTag(enTagRole); char cName[3][256] = { "minren1", "xiaoyin", "NewProject" }; Armature *pRole = Armature::create(cName[0]); pRole->setPosition(ccp(640 / 2, 210)); pRole->setAnchorPoint(ccp(pRole->getAnchorPoint().x, 0)); pRole->getAnimation()->play("hold"); addChild(pRole, 100000, enTagRole); } else{ pSelect_Img->setVisible(false); } }
可參考文章:cocos2dx3.2實現格鬥人物選擇界面