• Cocos2d-x学习之---点击按钮动态展现出一列菜单的一些想法


    场景展现:游戏中,比如说点击设置按钮,然后就会弹出一列菜单的效果,每个子项菜单是一个一个展现的效果,并且带一个背景。不是那种简单的点击按钮,然后一排菜单同时展现的那种效果。
    
    

    
    

    个人思路:首先背景的展现,在这里,我的想法就是做一个小背景图,然后把背景图沿X轴拉伸就可以了;然后,关于子项菜单的逐项弹出效果,我的想法是在初始化的时候创建好子项菜单,然后加入到一个数组中。在点击按钮的时候,遍历数组,将每个子项展现出来,并且坐标会在遍历的过程中变化,使每个子项菜单的位置是不一样的。这样效果就出来了。

    OK,上代码:

    //拉伸背景的创建
     lashen=CCSprite::create("lashen.png");
            lashen->setPosition(ccp(800,200));
            lashen->setAnchorPoint(ccp(1,0));
            lashen->setVisible(false);
            this->addChild(lashen);

    首先创建拉伸背景,并且背景初始的时候是不可见的。(在创建的时候retain,在点击的时候add,再次点击的时候remove。这样能不能达到节省内存的作用呢?)

     //item,假如这是个设置按钮
            CCMenuItemImage* itemImage=CCMenuItemImage::create("CloseNormal.png", "CloseSelected.png", this, menu_selector(TestLayer::dianjiCallBack));
            itemImage->setAnchorPoint(ccp(1,0));
            itemImage->setPosition(ccp(850,200));
            pMenu = CCMenu::create(itemImage, NULL);
            pMenu->setPosition( CCPointZero );
            this->addChild(pMenu, 1);

    然后我们开始创建菜单子项:

     //这里假设要创建10个子项菜单
    for (int i=0; i<11; i++) {
                CCMenuItemImage* itemImage=CCMenuItemImage::create("CloseNormal.png", "CloseSelected.png", this, menu_selector(TestLayer::dianCallBack));
                itemImage->retain();
                itemImage->setAnchorPoint(ccp(1,0));
                
                array->addObject(itemImage);
            }

    上面代码中的array是一个数组,用来管理子项菜单

    //这里是设置按钮的回调函数
    void TestLayer::dianCallBack(cocos2d
    ::CCObject *sender){
        CCLog("dianji");
    }
    void TestLayer::dianjiCallBack(CCObject *sender){   
        if (!dianji) {
            lashen->setVisible(true);       
            this->schedule(schedule_selector(TestLayer::lashenUpdate));
            skew=0.0f;
            dianji=true;
            return ;
        }
        if (dianji) {
            this->schedule(schedule_selector(TestLayer::suoxiaoUpdate));
            ss=10.0f;        
            dianji=false;
            return ;
        }
    }

    点击一次按钮,我就做一个定时器,这里用定时器,我的想法是实现那种逐步展现的效果。最终运行效果看起来是挺不错的。

    最后是点击设置按钮,然后子项菜单逐项弹出缩回的代码:

    void TestLayer::lashenUpdate(float dt){
        skew++;
        if (skew<=10.0f) {
            CCLog("skew===%d",(int)skew);
            CCMenuItemImage* item=(CCMenuItemImage*)array->objectAtIndex((int)skew);
            item->setPosition(ccp(850-(int)skew*50,200));
            pMenu->addChild(item);
            lashen->setScaleX(skew);
        }
    }
    
    void TestLayer::suoxiaoUpdate(float dt){
        ss--;
        if (ss>=0.0f) {
            CCLog("ss===%d",(int)ss+1);
            lashen->setScaleX(ss);
            CCMenuItemImage* item=(CCMenuItemImage*)array->objectAtIndex(((int)ss+1));
            pMenu->removeChild(item, false);
            
           if (ss==0) {
                lashen->setVisible(false);
            }
        }
    }



    
    
    
  • 相关阅读:
    android 中使用AsyncTask实现简单的异步编程
    android TextView 垂直自动滚动
    (转)c3p0配置大全
    Android中在底端显示选项卡
    android 中ImageView的scaletype属性
    android 权限大全
    Palm应用开发之六 常用命令及debug
    android spinner 实现Text 和 value
    [转载]【职场宝典】面试官如何看待学历?
    起跑
  • 原文地址:https://www.cnblogs.com/zhong-dev/p/4044603.html
Copyright © 2020-2023  润新知