我再次需要你的帮助,感谢你每次帮助我。
我正在使用' 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没有发生标签重载)。
答案 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]];