游戏中会出现的角色有曹操,将军(赵云等),兵三种类型,但是,将军有多种贴图,而且,将军还有横竖之分。
属性:
ID | id | |
贴图 | image_name | |
类型 | type | 四种类型 boss,曹操 general_hor将军横向, general_ver,将军竖向 soldier士兵 |
宽度 | width | 横向占的格子数 |
高度 | height | 竖向占的格子数 |
xml文档截图:
代码:
Role.h
#ifndef _ROLE_H_ #define _ROLE_H_ #include "cocos2d.h" #include "tinyxml2/tinyxml2.h" #define IF_NULL_RETURN_FALSE(_x_) if(_x_ == nullptr) return false using namespace tinyxml2 ; USING_NS_CC ; typedef enum { kRoleTypeNone = 0,kRoleTypeBoss,//<曹操 kRoleTypeArmyGeneralHorizontal,//<横向的将军 kRoleTypeArmyGeneralVertical,//<竖直的将军 kRoleTypeSoldier,//<士兵 }RoleType; class Role : public Ref { public: static cocos2d::Vector<Role*> s_roleVec ; static const char * XML_FILE_NAME ; static bool initStatic(); static bool parseData(XMLElement * pElement) ; static void finalizeStatic(); public: Role(); ~Role(); bool init(XMLElement * pElement); RoleType getTypeByChar(const char * pType); private: CC_SYNTHESIZE_READONLY(int,m_id,ID) ; CC_SYNTHESIZE_READONLY(int,m_width,Width) ; CC_SYNTHESIZE_READONLY(int,m_height,Height) ; CC_SYNTHESIZE_READONLY(RoleType,m_type,Type); CC_SYNTHESIZE_READONLY(cocos2d::__String *,m_pImageName,ImageName) ; }; #endif
Role.cpp
#include "Role.h" const char * Role::XML_FILE_NAME = "roles.xml" ; Vector<Role*> Role::s_roleVec ; bool Role::initStatic() { std::string filePath = FileUtils::getInstance()->fullPathForFilename(XML_FILE_NAME) ; tinyxml2::XMLDocument pDoc; FileUtils::getInstance()->setPopupNotify(false) ; ssize_t fileSize = 0 ; std::string data = FileUtils::getInstance()->getStringFromFile(filePath.c_str()); FileUtils::getInstance()->setPopupNotify(true) ; pDoc.Parse(data.c_str()) ; XMLElement * pEle = pDoc.RootElement() ; return parseData(pEle) ; } bool Role::parseData(XMLElement * pElement) { s_roleVec.clear() ; XMLElement * child = pElement->FirstChildElement() ; for (;child;child = child->NextSiblingElement()) { if (strcmp(child->Value(),"role") == 0) { Role * pRol = new Role() ; if (!pRol->init(child)) { CC_SAFE_RELEASE_NULL(pRol); return false ; } s_roleVec.pushBack(pRol) ; pRol->release() ; } } return true ; } void Role::finalizeStatic() { s_roleVec.clear() ; } Role::Role() :m_id(-1),m_pImageName(nullptr),m_type(kRoleTypeNone),m_width(0),m_height(0) { } Role::~Role() { CC_SAFE_RELEASE_NULL(m_pImageName) ; } bool Role::init(XMLElement * pElement) { const char * pId = pElement->Attribute("id") ; IF_NULL_RETURN_FALSE(pId) ; m_id = atoi(pId) ; const char * pImageName = pElement->Attribute("image_name") ; IF_NULL_RETURN_FALSE(pImageName) ; m_pImageName = new __String(pImageName) ; const char* pType = pElement->Attribute("type") ; IF_NULL_RETURN_FALSE(pType); m_type = getTypeByChar(pType) ; const char * pWidth = pElement->Attribute("width") ; IF_NULL_RETURN_FALSE(pWidth); m_width = atoi(pWidth); const char * pHeight = pElement->Attribute("height") ; IF_NULL_RETURN_FALSE(pHeight); m_height = atoi(pHeight); log("Role:%d----%d-----%d",m_height); return true; } RoleType Role::getTypeByChar(const char * pType) { if (strcmp("boss",pType) == 0) { return kRoleTypeBoss ; } else if (strcmp("soldier",pType) == 0) { return kRoleTypeSoldier ; } else if (strcmp("general_ver",pType) == 0) { return kRoleTypeArmyGeneralVertical; } else if (strcmp("general_hor",pType) == 0) { return kRoleTypeArmyGeneralHorizontal; } return kRoleTypeNone ; }