Objective c 从另一个类中删除ccLabelBMFONT并将新的放置在同一位置
我再一次需要你的帮助,我像每次你帮助我一样感谢你 我正在使用“COCOS2D”框架和“OBJECTIVE-C”在iPhone上开发游戏。在我的游戏中有十(10)个关卡。关卡标签是在一个类(即:e HudLayer.h,HudLayer.m)中创建和定义的,我正在移除另一个类(即:e GameScene.m)中的标签,在游戏中我使用ccLabelBMFont创建关卡标签 现在的问题是,当我删除标高标签(即标高1)并放置新标高标签(即标高2)时,代码没有删除“标高1”并将“标高2”放置在上一标高标签(即标高1)上 以下是我针对上述问题的代码,请告诉我哪里出了问题: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”放置在上一标高标签
**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类的对象并调用:-)