zoukankan      html  css  js  c++  java
  • cocos2dx 3.x (单选,多选,复选checkBox按钮的实现) RadioButton

     1 //
     2 //  LandLordsMakeNewRoom.hpp
     3 //  MalaGame39
     4 //
     5 //  Created by work on 2016/12/19.
     6 //
     7 //
     8  
     9 #ifndef LandLordsMakeNewRoom_hpp
    10 #define LandLordsMakeNewRoom_hpp
    11  
    12 #include <stdio.h>
    13 #include <cocos2d.h>
    14 #include "ui/cocosGUI.h"
    15 #include <cocostudio/CocoStudio.h>
    16 using namespace cocos2d::ui;
    17  
    18 class LandLordsMakeNewRoom : public cocos2d::Layer
    19 {
    20 private:
    21     cocos2d::Node* m_rootNode;
    22     Button* m_return;
    23 //    long long m_ruleNum;
    24     RadioButton* m_boomButton[4];
    25     RadioButton* m_numberButton[3];
    26     int m_ruleNum[6] = {0,0,0,0,0,0};
    27 public:
    28     bool init();
    29     void onEnter();
    30     void onExit();
    31     void buttonReturnCallback(Ref *senderz, cocos2d::extension::Control::EventType controlEvent);
    32 //    void onChangedRadioButtonOneSelect(RadioButton* radioButton, RadioButton::EventType type);
    33 //    void onChangedRadioButtonTwoSelect(RadioButton* radioButton, RadioButton::EventType type);
    34 //    void onChangedRadioButtonThreeSelect(RadioButton* radioButton, RadioButton::EventType type);
    35 //    void onChangedRadioButtonFourSelect(RadioButton* radioButton, RadioButton::EventType type);
    36     void buttonMakeNewRoomCallback(Ref *senderz, cocos2d::extension::Control::EventType controlEvent);
    37     void onChangedRadioButtonBoomBgSelect(RadioButton* radioButton, RadioButton::EventType type);
    38     void onChangedRadioButtonChooseBgSelect(RadioButton* radioButton, RadioButton::EventType type);
    39     void setLayerData(GameRuleData& rule);
    40     void checkBoxCallback(CheckBox* sender,CheckBoxEventType type);
    41     CREATE_FUNC(LandLordsMakeNewRoom);
    42 };
    43  
    44  
    45 #endif /* LandLordsMakeNewRoom_hpp */
    46  
    47  
      1 //
      2 //  LandLordsMakeNewRoom.cpp
      3 //  MalaGame39
      4 //
      5 //  Created by work on 2016/12/19.
      6 //
      7 //
      8  
      9 #include "LandLordsMakeNewRoom.hpp"
     10 #include "cocos-ext.h"
     11 #include <stdio.h>
     12 USING_NS_CC;
     13 using namespace cocos2d::ui;
     14 using namespace cocos2d::extension;
     15 bool LandLordsMakeNewRoom::init()
     16 {
     17     if (!Layer::init()) {
     18         return false;
     19     }
     20     
     21     Sprite* bg = Sprite::create("LandLord/LandLordsmake_room_bg.png");//背景图片
     22     bg->setPosition(Vec2(612,372));
     23     this->addChild(bg);
     24     
     25     
     26     auto Relieve=cocos2d::ui::Scale9Sprite::createWithSpriteFrameName("friend_fight_x.png");
     27     auto m_buttonRelieve = ControlButton::create(Relieve);
     28     m_buttonRelieve->setPosition( 991.5,644.8);
     29     m_buttonRelieve->addTargetWithActionForControlEvents(this, cccontrol_selector(LandLordsMakeNewRoom::buttonReturnCallback), Control::EventType::TOUCH_UP_INSIDE);//按钮点击事件
     30     this->addChild(m_buttonRelieve);
     31     
     32     
     33     auto share=cocos2d::ui::Scale9Sprite::createWithSpriteFrameName("make_btn.png");
     34     auto m_buttonShare = ControlButton::create(share);
     35     m_buttonShare->setPosition( 627,117);
     36     m_buttonShare->addTargetWithActionForControlEvents(this, cccontrol_selector(LandLordsMakeNewRoom::buttonMakeNewRoomCallback), Control::EventType::TOUCH_UP_INSIDE);
     37     this->addChild(m_buttonShare);
     38  
     39     
     40     CheckBox* checkBox[4] = {nullptr};
     41     for (int i=0;i<4;i++){
     42         //for循环创建4个复选按钮
     43         checkBox[i] = CheckBox::create("LandLord/make_room_unselected.png",//未选中时的显示图片
     44                                        "LandLord/make_room_unselected.png",//点击checkBox后触摸没有松开时的图片
     45                                        "LandLord/make_room_select.png",//选中时的显示图片
     46                                        "LandLord/make_room_select.png",//从选中到未选中切换过程中,触摸没有松开时的显示图片
     47                                        "LandLord/make_room_select.png");
     48         
     49          checkBox[i]->::LandLordsMakeNewRoom::setPosition(402,500-(i*40));
     50          checkBox[i]->setTag(i+1);
     51          checkBox[i]->addEventListenerCheckBox(this ,checkboxselectedeventselector(LandLordsMakeNewRoom::checkBoxCallback));
     52          this->addChild(checkBox[i]);
     53         
     54     }
     55     
     56     
     57  
     58     for (int i = 0; i<4; i++) {//单选(按钮)
     59         m_boomButton[i] = RadioButton::create("make_room_unselected.png", "make_room_select.png", Widget::TextureResType::PLIST);
     60         m_boomButton[i]->setPosition(Vec2(500+(106*i), 330));
     61         m_boomButton[i]->setTag(i+11);
     62         m_boomButton[i]->addEventListener(CC_CALLBACK_2(LandLordsMakeNewRoom::onChangedRadioButtonBoomBgSelect,this));
     63         this->addChild(m_boomButton[i]);
     64     }
     65  
     66     
     67     
     68     int number[3] = {6,10,20};//局数单选
     69     for (int i = 0; i<3; i++) {
     70         m_numberButton[i] = RadioButton::create("make_room_unselected.png", "make_room_select.png", Widget::TextureResType::PLIST);
     71         m_numberButton[i]->setPosition(Vec2(450+200*i+20, 270));
     72         m_numberButton[i]->setTag(i+21);
     73         m_numberButton[i]->addEventListener(CC_CALLBACK_2(::LandLordsMakeNewRoom::onChangedRadioButtonChooseBgSelect,this));
     74         this->addChild(m_numberButton[i]);
     75         auto label = Label::createWithSystemFont(StringUtils::format("%d局(房卡x%d)",number[i],i+1), "", 24);
     76         label->setColor(Color3B::YELLOW);
     77         label->setPosition(Vec2(450+200*i+20, 240));
     78         this->addChild(label);
     79     }
     80     
     81     m_boomButton[0]->setSelected(true);//默认第一个单选按钮为选中
     82     m_numberButton[0]->setSelected(true);
     83     
     84     PublicMethod::addLayerTouchShield(this);
     85  
     86     return true;
     87 }
     88 void LandLordsMakeNewRoom::onEnter()
     89 {
     90     Layer::onEnter();
     91 }
     92 void LandLordsMakeNewRoom::onExit()
     93 {
     94     Layer::onExit();
     95 }
     96  
     97 void LandLordsMakeNewRoom::onChangedRadioButtonBoomBgSelect(RadioButton* radioButton, RadioButton::EventType type)
     98 {
     99     
    100     if (radioButton == nullptr) {
    101         return;
    102     }
    103     
    104     int tag = ((RadioButton*)radioButton)->getTag();//获取按钮当前的tag值
    105     
    106     for (int i=0; i<4; i++) {//for循环实现单选
    107         m_boomButton[i]->setSelected(false);//先让全部按钮设为处于未选中状态
    108         if (i+11==tag) {//通过tag值进入判断
    109             m_boomButton[i]->setSelected(true);//让当前按钮为选中
    110             m_ruleNum[4]=tag-11;
    111         }
    112     }
    113     
    114 }
    115 void LandLordsMakeNewRoom::onChangedRadioButtonChooseBgSelect(RadioButton* radioButton, RadioButton::EventType type)
    116 {
    117     if (radioButton == nullptr) {
    118         return;
    119     }
    120     
    121     int tag = ((RadioButton*)radioButton)->getTag();
    122     
    123     for (int i=0; i<3; i++) {
    124         m_numberButton[i]->setSelected(false);
    125         if (i+21==tag) {
    126             m_numberButton[i]->setSelected(true);
    127             m_ruleNum[5]=tag-21;
    128         }
    129     }
    130 }
    131 
    132 //复选按钮的实现方法
    133 void LandLordsMakeNewRoom::checkBoxCallback(CheckBox* sender,CheckBoxEventType type)
    134 {
    135     int tag = sender->getTag();//同样需要拿到当前checkBox的tag值
    136     if(type==CHECKBOX_STATE_EVENT_SELECTED){//判断check的状态(选中状态)
    137         CCLOG("sender:%d",tag);
    138         m_ruleNum[tag-1]=1;
    139     //在这里可做其他操作
    140     }
    141     else if(type==CHECKBOX_STATE_EVENT_UNSELECTED)//为未选中状态
    142     {
    143         m_ruleNum[tag-1]=0;
    144     }
    145  
    146 }
    147 void LandLordsMakeNewRoom::buttonReturnCallback(Ref *senderz, Control::EventType controlEvent)
    148 {
    149         removeFromParent();//移除当前图层
    150     
    151 }
  • 相关阅读:
    (4.15)存储DAS,NAS,SAN在数据库存储上的应用
    (4.14)存储:RAID在数据库存储上的应用
    关于like %%的优化思路
    (4.13)SQL Server profile使用、数据库优化引擎顾问使用
    图形界面执行计划图标释义
    (4.15)全文索引的使用
    倒排索引/全文搜索基本原理
    SQLServer: 用 ApexSQLLog 恢复 SQL Server 数据
    (4.12)2012及以上列存储索引
    教你管理SQL实例系列(1-15)
  • 原文地址:https://www.cnblogs.com/luorende/p/6206397.html
Copyright © 2011-2022 走看看