我有CCMenu
个CCMenuItem
个。当用户触摸菜单项时,我希望菜单项移动到右边10个像素,以区别于其他像素。我尝试将每个菜单项设为全局变量,因此我可以说:if (item.isSelected) { [item runAction:blah]; }
但这没有做任何事情。到目前为止,这是我的代码:
CCLabelTTF *sin = [CCLabelTTF labelWithString:@"Single Player" dimensions:labelSize alignment:UITextAlignmentLeft fontName:font fontSize:20];
item1 = [CCMenuItemLabel itemWithLabel:sin target:self selector:@selector(goToSinglePlayer:)];
CCLabelTTF *spl = [CCLabelTTF labelWithString:@"Splitscreen" dimensions:labelSize alignment:UITextAlignmentLeft fontName:font fontSize:20];
item2 = [CCMenuItemLabel itemWithLabel:spl target:self selector:@selector(goToSplitscreen:)];
CCLabelTTF *ach = [CCLabelTTF labelWithString:@"Achievements" dimensions:labelSize alignment:UITextAlignmentLeft fontName:font fontSize:20];
item3 = [CCMenuItemLabel itemWithLabel:ach target:self selector:@selector(goToAchievements:)];
CCLabelTTF *str = [CCLabelTTF labelWithString:@"Store" dimensions:labelSize alignment:UITextAlignmentLeft fontName:font fontSize:20];
item4 = [CCMenuItemLabel itemWithLabel:str target:self selector:@selector(goToStore:)];
CCLabelTTF *set = [CCLabelTTF labelWithString:@"Settings" dimensions:labelSize alignment:UITextAlignmentLeft fontName:font fontSize:20];
item5 = [CCMenuItemLabel itemWithLabel:set target:self selector:@selector(goToSettings:)];
CCMenu * mainMenu = [CCMenu menuWithItems:item1, item2, item3, item4, item5, nil];
[mainMenu setColor:ccBLACK];
[mainMenu alignItemsVerticallyWithPadding:10];
mainMenu.position = ccp(90, 90);
[self addChild:mainMenu];
if (item1.isSelected) {
[item1 runAction:[CCMoveTo actionWithDuration:1.0f position:ccp(120, 90)]];
}
我的问题是:我怎样才能达到我之前提到的效果?我希望当用户触摸但未释放时,所选CCMenuItem
向右移出10个像素,然后在触摸离开该菜单项时返回其正常位置。另外,我应该在哪里放这个动画代码?在我的init
函数中?谢谢你的帮助
答案 0 :(得分:9)
如果要更改CCMenuItemLabel对象的“开箱即用”行为,则需要对该特定类cocos2d进行子类化。您需要覆盖的方法是
-(void) selected{
// coco's default is to scale up by 10%
// place your code to displace the label.
self.position=ccp(self.position.x-10,self.position.y);
}
-(void) unselected{
// coco's default is to bring back scale to originalScale.
self.position=ccp(self.position.x+10,self.position.y);
}
当手指触摸标签时,会调用“已选择”方法。当手指被抬起或被拖到标签外时,会调用“未选择”方法。我刚刚向您展示了选择/未选择行为的基本(非常)方法,并对其进行了实验。涉及时间问题。我会避免使用动画作为第一次尝试。如果你想要一个带动画的例子,请查看CCMenuItemLabel类中的代码。
答案 1 :(得分:7)
检查以下两行代码:
CCMenuItem *item31 = [CCMenuItemImage itemFromNormalImage:@"btn_on.png" selectedImage:@"btn_on_hover.png"];
CCMenuItem *item32 = [CCMenuItemImage itemFromNormalImage:@"btn_off.png" selectedImage:@"btn_off_hover.png"];
CCMenu.h
课程。您可以
根据您的要求修改课程。例如,您可以对CCMenu.h
类中的以下代码片段进行更改。
#pragma mark Menu - Touches
#ifdef __IPHONE_OS_VERSION_MAX_ALLOWED
如有任何疑问,请与我联系。 问候, 尼尔。