cocos2d-x 游戏创作过程(四)

cocos2d-x 游戏创作过程 后台的控制界面创作

  1. 制作一个可以操控的界面
  2. 然后给界面 加载需要的值
  3. 从瓦片地图中获取需要的属性。
  4. 打开界面关闭界面。

制作一个可操控的界面,然后给界面加载需要的值。

如果用CocosStudio的话,可以轻松制作一个,美观的界面。 然后用这张界面加载数据。

加载界面的时候用逻辑符号,所对应的ui。加载就可以了,很简单。


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解析器而已。 所以很容易取出来。 首先从瓦片组中,取出每一条对象,然后每一条对象逐一解析。 就可以得到不同的值了。瓦片对象块,可以在地图层修改 敌人与物品的数据。 可以方便开发。 开发的目的大部分要做好的后期的简化编辑状态。 只要做好对应的状态那么开发很容易上手,甚至不需要代码的参了。

    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));可操控的计时器。 就可以了。

        //如果用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;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

昏暗的夜晚

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值