Cocos2d iphone 具有Objective-C的Cocos2D MenuItem亚类
我在我的小项目中使用了一个Cocos2d iphone 具有Objective-C的Cocos2D MenuItem亚类,cocos2d-iphone,subclass,menuitem,Cocos2d Iphone,Subclass,Menuitem,我在我的小项目中使用了一个CCMenu,它有三个按钮。我需要这些按钮在检测到触摸时保持触发,由于这不是正常行为,我决定将CCMenuItem子类化,并覆盖一些方法 我希望覆盖的两种方法是: -(void) selected { // subclass to change the default action if(isEnabled_) { [super selected]; [self stopActionByTag:kZoomActionTa
CCMenu
,它有三个按钮。我需要这些按钮在检测到触摸时保持触发,由于这不是正常行为,我决定将CCMenuItem
子类化,并覆盖一些方法
我希望覆盖的两种方法是:
-(void) selected
{
// subclass to change the default action
if(isEnabled_) {
[super selected];
[self stopActionByTag:kZoomActionTag];
originalScale_ = self.scale;
CCAction *zoomAction = [CCScaleTo actionWithDuration:0.1f scale:originalScale_ * 1.2f];
zoomAction.tag = kZoomActionTag;
[self runAction:zoomAction];
}
}
-(void) unselected
{
// subclass to change the default action
if(isEnabled_) {
[super unselected];
[self stopActionByTag:kZoomActionTag];
CCAction *zoomAction = [CCScaleTo actionWithDuration:0.1f scale:originalScale_];
zoomAction.tag = kZoomActionTag;
[self runAction:zoomAction];
}
}
所以在我的子类中,我只是简单地复制了这些代码,但是用新的功能替换了里面的代码。为了简单起见,我们将说:
-(void) selected
{
//turn a sprite around
mySprite.rotation = 0;
}
-(void) unselected
{
//turn a sprite around
mySprite.rotation = 180;
}
现在,mySprite将在主体代码的头中声明,主体代码被导入到这个子类中
问题是mySprite无法显示,它得到了一个未声明的
错误。我应该使用[super selected]
而不是mySprite
?我尝试过这个,我得到了完全相同的错误
谢谢。首先,是的,如果您想让[super selected]执行菜单项的默认行为,而不仅仅是复制超类函数的内容,那么应该使用[super selected]。对于您复制的CCMenuItemLabel,调用[super selected]将允许标签在选中时根据其视觉效果“完成其任务”。这可以让你专注于你想做的事情 至于为什么你的精灵不能被看到,以及“未声明”的错误可能是什么,很难说没有看到代码。一个问题可能是您说您正在子类化CCMenuItem,但正在粘贴CCMenuItemLabel代码 你有没有试过直接在你的按钮精灵上观看CCTouchesStart和CCTouchesEnd?可能比试图强迫CCMenuItem做它不是真正设计用来做的事情更简单 如果做不到这一点,请查看“虚拟操纵杆”,您应该会得到一些好的示例代码。Cocos2d论坛至少有两个主题: