Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/visual-studio-2010/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Cocos2d iphone 具有Objective-C的Cocos2D MenuItem亚类_Cocos2d Iphone_Subclass_Menuitem - Fatal编程技术网

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论坛至少有两个主题: