Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/39.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中更新HUD上的标签?_Iphone_Ios_Cocos2d Iphone - Fatal编程技术网

在Cocos2d iPhone中更新HUD上的标签?

在Cocos2d iPhone中更新HUD上的标签?,iphone,ios,cocos2d-iphone,Iphone,Ios,Cocos2d Iphone,我在我的游戏层上创建了一个HUD层,在下面代码的帮助下,添加了一个标签来显示HUD中的分数 // playGame Class +(CCScene *) scene { // 'scene' is an autorelease object. CCScene *scene = [CCScene node]; // 'layer' is an autorelease object. playGameLayer *layer = [playGameLayer node]; // add la

我在我的游戏层上创建了一个HUD层,在下面代码的帮助下,添加了一个标签来显示HUD中的分数

 // playGame Class

+(CCScene *) scene
{
// 'scene' is an autorelease object.
CCScene *scene = [CCScene node];

// 'layer' is an autorelease object.
playGameLayer *layer = [playGameLayer node];

// add layer as a child to scene 
[scene addChild: layer];

// create HUD
    id statsHuds = [HUDlayer statsHUDWithBackgroundSprite:HUDBackground withRect:CGRectMake(160,30, 130,60)];

[statsHuds addLabeltoStatsHUDwithName:@"Score" andValue:@"50"];
//[statsHuds setStatusString:@"yewq"]; 
//[statsHuds updateScorewithValue:199];
// add HUD
    [scene addChild: statsHuds];

// return the scene


return scene;
}

- (id)init
{
    // always call "super" init
    // Apple recommends to re-assign "self" with the "super" return value
    if( (self=[super init])) 
    {

    [[CCTouchDispatcher sharedDispatcher] addTargetedDelegate:self priority:0 swallowsTouches:NO];

    [self performSelector:@selector(updateLabel) withObject:nil afterDelay:5];

}
return self;
}

-(void)updateScore
{

HUDlayer *obj = [[HUDlayer alloc]init];
[obj setScoreString:@"100"];
[obj release];
}


// HUDLayer Class

+(id)statsHUDWithBackgroundSprite:(NSString *)spriteName withRect:(CGRect)rect
{
    HUDlayer *hud = [[HUDlayer alloc] init];

UIImage *image = [UIImage imageNamed:spriteName];

CCSprite *statsSprite = [CCSprite spriteWithCGImage:image.CGImage key:nil];
[statsSprite setPosition:ccp(rect.origin.x,rect.origin.y)];
[hud addChild:statsSprite];



return [hud autorelease];
}

-(void)addLabeltoStatsHUDwithName:(NSString *)labelName andValue:(NSString *)labelValue
{

[_statusLabel setString:@"no"];// [CCLabelBMFont labelWithString:@"no" fntFile:@"Arial.fnt"];
[_statusLabel setPosition:ccp(160,240)];
[self addChild:_statusLabel];

}

// label added above is not updating
- (void)setScoreString:(NSString *)string 
{
    _statusLabel.string = string;

    NSLog(@"stats string after %@",_statusLabel.string);
}
_statuslbel添加到HUD后不会更新,即使NSlog返回新值
我可能做错了什么???

在updateScore方法中,每次启动此方法时,您都在创建一个新的HUDLayer对象

相反,您需要引用添加到场景中的HUD图层。我建议您为HUD图层添加一个标签:

[scene addChild: statsHuds z:0 tag:HUDTag];
然后在updateScore方法中,通过其标记访问该图层并更新您的分数:

-(void)updateScore
{
    HUDLayer * obj = (HudLayer *)[self.parent getChildByTag:HUDTag];
    [obj setScoreString:@"100"];
}

希望这能有所帮助。

statusLabel是在哪里创建的?updateScore方法应该做什么?似乎每次调用都会创建一个新层。。updateScore更新分数并需要更新_StatusLabeliUpdateScore方法应该被称为Frequency吗?我也找不到updateLabel方法,除非这里没有包含它。它存在于playgame类的init方法中。。5秒后只调用一次该行:HUDlayer*obj=[[HUDlayer alloc]init];这行代码是:HUDlayer*hud=[[HUDlayer alloc]init];正在创建两个独立的HUD图层。