cocos2D创建一组单选按钮菜单

来源:互联网 发布:手机淘宝网充话费 编辑:程序博客网 时间:2024/06/12 12:25

看了一下CCMenu类的实现,主要包含以下几个关键参数:

  1. selected_成员变量,配合selected和unselected方法设置CCMenuItemImage中SelectedItemImage是否显示。
  2. state_成员变量有2种状态,当TouchBegan的时候设置为Tracking状态,TouchEnd的时候设置为Waiting状态。
  3. activate方法使得当前CCMenuItem获得焦点,真正的被选中。
  4. CCMenuItem *curSelection = [self itemForTouch:touch];该变量用来记录当前touch的CCMenuItem 


创建一个CCRadioMenu类继承自CCMenu类

1.  curHightLighted_ 成员变量,表示当前选中的Item

CCRadioMenu.m文件主要内容如下:

- (void)setSelectedItem: (CCMenuItem *)item{    [selectedItem_ unselected];    selectedItem_ = item;    [selectedItem_ selected];}

-(BOOL) ccTouchBegan:(UITouch *)touch withEvent:(UIEvent *)event{if( state_ != kCCMenuStateWaiting || !visible_ )return NO;CCMenuItem *curSelection = [self itemForTouch:touch];    [curSelection selected];    _curHightlighted = curSelection;        if (_curHightlighted) {        if (selectedItem_ != curSelection) {            [selectedItem_ unselected];                        state_ = kCCMenuStateTrackingTouch;            return YES;        }    }return NO;}-(void) ccTouchEnded:(UITouch *)touch withEvent:(UIEvent *)event{NSAssert(state_ == kCCMenuStateTrackingTouch, @"[Menu ccTouchEnded] -- invalid state");    CCMenuItem *curSelection = [self itemForTouch:touch];        if (curSelection) {        if (curSelection != _curHightlighted) {            [_curHightlighted unselected];            selectedItem_ = curSelection;            [selectedItem_ selected];            [selectedItem_ activate];            _curHightlighted = nil;            state_ = kCCMenuStateWaiting;            return;        }    }    [selectedItem_ unselected];    selectedItem_ = _curHightlighted;    [selectedItem_ selected];    [selectedItem_ activate];    _curHightlighted = nil;state_ = kCCMenuStateWaiting;}


用法如下:

    CCRadioMenu *radioMenu = [CCRadioMenu menuWithItems:menuItem1, menuItem2, menuItem3, nil];    [radioMenu setSelectedItem:menuItem1];    [radioMenu alignItemsVerticallyWithPadding:(20.0/480)*winSize.height];    radioMenu.position = ccp(winSize.width/2, winSize.height/2);    [self addChild:radioMenu z:2];



原创粉丝点击