若是用CocosStudio的话,能够轻松制做一个,美观的界面。 而后用这张界面加载数据。web
加载界面的时候用逻辑符号,所对应的ui。加载就能够了,很简单。svg
void DialogLayer::initDialogLayer(const char* filename,std::vector<PropertyData *> propertyVector){
//输入要加载的界面,这里是Studio制做的简易介面
if(filename == "MainScene.csb"){
auto rootNode = CSLoader::createNode(filename);
//找到逻辑符号
btn = (Button *)rootNode->getChildByTag(3);
btn1 = (Button *)rootNode->getChildByTag(4);
btn->setTitleText("");
btn1->setTitleText("");
// setTexture
//这里是要加载的数据,用Vector封装了一下,而后再把图片取出来。
btn->loadTextures(propertyVector[0]->getImage(),propertyVector[0]->getImage());
btn1->loadTextures(propertyVector[1]->getImage(),propertyVector[1]->getImage());
//这里是一些控制,没什么用
btn->addTouchEventListener(CC_CALLBACK_2(DialogLayer::touchCallBack,this));
addChild(rootNode);
}
瓦片中添加对象层,就能够在对象层中随意添加数字。 并且能够把瓦片在地图中的位置精确取出来,因此很是方便, 而TMXObjectGroup 也就是一些XML解析器而已。 因此很容易取出来。 首先从瓦片组中,取出每一条对象,而后每一条对象逐一解析。 就能够获得不一样的值了。瓦片对象块,能够在地图层修改 敌人与物品的数据。 能够方便开发。 开发的目的大部分要作好的后期的简化编辑状态。 只要作好对应的状态那么开发很容易上手,甚至不须要代码的参了。ui
TMXObjectGroup *group = tileMap->getObjectGroup("thing");
//这个组的全部Object都封装在Vector中
std::vector<Value> group1 =group->getObjects();
for(int i=0;i<group1.size();i++){
//从Value中取出的时候其实是个键值对。
ValueMap spawnPoint = group1[i].asValueMap();
//获取位置数据
float pro = spawnPoint["x"].asFloat();
float pro_y=spawnPoint["y"].asFloat();
//还能够取出不少数据。。。。。。。
CCLOG("具体位置。%f",pro);
//建立实体
PropertyData *property=PropertyData::create();
property->setImage("gun1.png");
property->setID(39);
b2BodyDef bodyDef;
bodyDef.type = b2_dynamicBody;
bodyDef.position.Set(pro/PTM_RATIO, (pro_y/PTM_RATIO));
b2Body *body=world->CreateBody(&bodyDef);
property->setID(38);
//这里设计的是一个多功能精灵。
EnemyRole *enemyRole = EnemyRole::createWithProperty(property,body,"str");
gameLayer->addChild(enemyRole,10);
}
很简单的一个Layer,在控制类里建立,而后销毁。就能够了。不知道对不对。可是注意的是若是打开设置界面的话,那么游戏应该暂停才对,若是onpause暂停的话。控制界面里的键位监听也跟着暂停了。 因此一个很简单的方法就是,把更新的计时器 变为
this->schedule(schedule_selector(GameLayer::update));可操控的计时器。 就能够了。this
//若是用Esc打开设置界面的话,那么是6.
case 6:
//设置标记
if(!dialog){
//这里设置的是在控制界面里赋值。被封装的PropertyData里赋值。
PropertyData *pro =PropertyData::create();
pro->setImage("gun1.png");
PropertyData *pro1 =PropertyData::create();
pro1->setImage("BoxA2.png");
propertyVector.push_back(pro);
propertyVector.push_back(pro1);
dia=DialogLayer::createDialogLayer("MainScene.csb",propertyVector);
dia->setCameraMask((unsigned short)CameraFlag::USER2);
this->unschedule(schedule_selector(GameLayer::update));
this->addChild(dia,60);
dialog=true;
}else{
//别忘了清空集合
this->schedule(schedule_selector(GameLayer::update));
this->removeChild(dia,true);
propertyVector.clear();
propertyVector.clear();
vector<PropertyData *> f;
vector<PropertyData *> s;
propertyVector.swap(f);
propertyVector.swap(s);
dialog=false;
}
break;