删除标签FONT并将新标签放在另一个类的同一位置

时间:2012-03-24 08:40:18

标签: objective-c cocos2d-iphone

我再次需要你的帮助,感谢你每次帮助我。

我正在使用' COCOS2D'在iPhone中开发游戏。框架和'目标-C'。在我的游戏中有十(10)级。 LEVEL标签在类(i:e HudLayer.h,HudLayer.m)中创建和定义,我在另一个类中移除LABEL(i:e GameScene.m),在游戏中我使用ccLabelBMFont创建LEVEL标签

现在的问题是当我删除LEVEL标签(i:e Level 1)并放置新的LEVEL标签(i:e Level 2)时,代码没有删除" Level 1" 并放置" Level 2"在上一个LEVEL标签上(i:e Level 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

现在编码" HudLayer.m"我在哪里合成并使用'级别'

#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 Class中删除LEVEL标签1并使用名称" 2级"在得分点的基础上:

        #import "GameScene.h"
        #import "HudLayer.h"
        @implementation GameLayer
        @synthesize level;

        @synthesize levelType = _levelType;
        if (self.levelType ==  Level1) {
                [self LevelFeatures];
                ifLevel2Started = FALSE;
            }

            if (self.levelType ==  Level2) {
                [self LevelFeatures1];
                ifLevel3Started = FALSE;
            }

            if (self.levelType ==  Level3) {
                [self LevelFeatures2];
                ifLevel4Started = FALSE;
            }

    -(void)LevelFeatures
    {
        HudLayer * hl = (HudLayer *)[self getChildByTag:KHudLayer]; // * HERE I AM DOING MY MAIN STEP, HERE AM CREATING OBJECT OF **"HudLayer" class** *

        hl.level = [CCLabelTTF labelWithString:[NSString stringWithFormat:@"Level 2"]  fontName:@"Marker Felt" fontSize:12];
//**HERE AM SETTING NEW Label FOR LEVEL.**
}

我发现问题只出现在上面的代码行中,因为我对此非常了解,所以你可以理解我的问题。

我应该在这里写什么/代码,这样以前的标签就可以完全删除并且新的地方就可以了。 (i:e没有发生标签重载)。


2 个答案:

答案 0 :(得分:1)

嗯,在你的实现代码片段的开头有一大堆代码丢失了,但是我冒昧地做了这件事(对你当前的设置进行了很少的改动):

 -(void)LevelFeatures {
     HudLayer * hl = (HudLayer *)[self getChildByTag:KHudLayer];
     [hl removeChild:h1.level cleanup:YES];
     hl.level=[CCLabelTTF labelWithString:[NSString stringWithFormat:@"Level 2"] 
                                 fontName:@"Marker Felt" 
                                 fontSize:12];
     [hl addChild:hl.level];
}

我不确定你为什么要在HudLayer中保留等级,但只是作为一个孩子添加到任何CCNode后代将为你保留它。此外,使用这种代码,我倾向于使用标签重新获得对我添加到CCNode后代的孩子的访问权。

答案 1 :(得分:1)

合成标签时请执行以下操作:

 levelLbl = [CCLabelTTF labelWithString:@"" fontName:@"Marker Felt" fontSize:12];

当您在Level Features中设置标签时,只需使用“setString:”,如下所示:

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