Objective c 从另一个类中删除ccLabelBMFONT并将新的放置在同一位置

Objective c 从另一个类中删除ccLabelBMFONT并将新的放置在同一位置,objective-c,cocos2d-iphone,Objective C,Cocos2d Iphone,我再一次需要你的帮助,我像每次你帮助我一样感谢你 我正在使用“COCOS2D”框架和“OBJECTIVE-C”在iPhone上开发游戏。在我的游戏中有十(10)个关卡。关卡标签是在一个类(即:e HudLayer.h,HudLayer.m)中创建和定义的,我正在移除另一个类(即:e GameScene.m)中的标签,在游戏中我使用ccLabelBMFont创建关卡标签 现在的问题是,当我删除标高标签(即标高1)并放置新标高标签(即标高2)时,代码没有删除“标高1”并将“标高2”放置在上一标高标签

我再一次需要你的帮助,我像每次你帮助我一样感谢你

我正在使用“COCOS2D”框架和“OBJECTIVE-C”在iPhone上开发游戏。在我的游戏中有十(10)个关卡。关卡标签是在一个类(即:e HudLayer.h,HudLayer.m)中创建和定义的,我正在移除另一个类(即:e GameScene.m)中的标签,在游戏中我使用ccLabelBMFont创建关卡标签

现在的问题是,当我删除标高标签(即标高1)并放置新标高标签(即标高2)时,代码没有删除“标高1”并将“标高2”放置在上一标高标签(即标高1)上

以下是我针对上述问题的代码,请告诉我哪里出了问题:

**Code of HudLayer.h**

#import "Foundation/Foundation.h"
#import "cocos2d.h"
#import "GameScene.h"

@interface HudLayer : CCLayer { 
    CCLabelBMFont * level;
}

@property (nonatomic,retain) CCLabelBMFont * level;
@end
#import "HudLayer.h" 
      #import "GameScene.h"

    @implementation HudLayer 

    @synthesize level;
       level = [CCLabelTTF labelWithString:[NSString stringWithFormat:@"Level 1",level] fontName:@"Marker Felt" fontSize:12];
       [level setAnchorPoint:ccp(1,0.5)];
       [level setPosition:ccp(250,470)]; 
       [level setColor:ccORANGE]; 
       [self addChild:level];
     }
     return self;
     }
     - (void) dealloc {
       [super dealloc];
       [lives release];
     } 

    @end

*HERE IS MY CODE FOR "GameScene.h"*

#import "cocos2d.h"
#import "HudLayer.h"
typedef enum {
    Level1, 
    Level2,
    Level3,
    Level4,
    Level5, 
    Level6,
    Level7, 
    Level8,
    Level9, 
    Level10,
} LevelType;

@interface GameLayer : CCLayer
{
int level;
BOOL ifLevel2Started;
    BOOL ifLevel3Started;
    BOOL ifLevel4Started;
    BOOL ifLevel5Started;
    BOOL ifLevel6Started;
    BOOL ifLevel7Started;
    BOOL ifLevel8Started;
    BOOL ifLevel9Started;
    BOOL ifLevel10Started;
}
@property (assign,readwrite) int level;
@end
现在为“HudLayer.m”编写代码,我正在合成并使用“level”:

**Code of HudLayer.h**

#import "Foundation/Foundation.h"
#import "cocos2d.h"
#import "GameScene.h"

@interface HudLayer : CCLayer { 
    CCLabelBMFont * level;
}

@property (nonatomic,retain) CCLabelBMFont * level;
@end
#import "HudLayer.h" 
      #import "GameScene.h"

    @implementation HudLayer 

    @synthesize level;
       level = [CCLabelTTF labelWithString:[NSString stringWithFormat:@"Level 1",level] fontName:@"Marker Felt" fontSize:12];
       [level setAnchorPoint:ccp(1,0.5)];
       [level setPosition:ccp(250,470)]; 
       [level setColor:ccORANGE]; 
       [self addChild:level];
     }
     return self;
     }
     - (void) dealloc {
       [super dealloc];
       [lives release];
     } 

    @end

*HERE IS MY CODE FOR "GameScene.h"*

#import "cocos2d.h"
#import "HudLayer.h"
typedef enum {
    Level1, 
    Level2,
    Level3,
    Level4,
    Level5, 
    Level6,
    Level7, 
    Level8,
    Level9, 
    Level10,
} LevelType;

@interface GameLayer : CCLayer
{
int level;
BOOL ifLevel2Started;
    BOOL ifLevel3Started;
    BOOL ifLevel4Started;
    BOOL ifLevel5Started;
    BOOL ifLevel6Started;
    BOOL ifLevel7Started;
    BOOL ifLevel8Started;
    BOOL ifLevel9Started;
    BOOL ifLevel10Started;
}
@property (assign,readwrite) int level;
@end
最后,我想从HudLayer类中删除级别标签1,并根据分数使用名为“级别2”的新标签:

我只在上面一行代码中发现问题,我为这行代码编写了这么大的查询,以便您能够准确地理解我的问题。

我应该在这里写些什么/编码,这样以前的标签就可以完全移除,新的标签就可以放在上面了。(i:e标签不会过载)



hmmm,在您的实现代码段的开头缺少一段代码,但我想大胆尝试一下(对您当前的设置进行最小的更改):


我不确定为什么要在HudLayer中保留level,但只要将其作为子级添加到任何CCNode子体中,就可以为您保留它。此外,对于此类代码,我倾向于使用标记来重新访问我添加到CCNode子代的子代。

对标签进行语法化时,请执行以下操作:

 levelLbl = [CCLabelTTF labelWithString:@"" fontName:@"Marker Felt" fontSize:12];
在LevelFeatures中设置标签时,只需使用“setString:”如下所示:

[hl.levelLbl setString:[NSString stringWithFormat:@"Level %i",level]];

感谢您的持续支持。我找到了问题的答案@YvesLeBorg,您提供的代码绝对正确,但在我的场景中不起作用。我在我的“GameLayer”类中编写了代码“oneter”方法,并使其正常工作。意味着我从HudLayer中完全删除了Level Label的代码,并在同一个类(GameLayer)中声明和定义,并且发现它工作了…现在不需要使用该类对象创建HudLayer类的对象并调用:-)