SpriteKit标签节点没有出现

时间:2014-11-04 17:57:31

标签: ios sprite-kit sklabelnode

我有一个奇怪的问题。 我在我的一个项目中使用标签节点。上次我添加自定义字体时,从那一刻起我的标签节点无法正常工作。 如果我将一个字体设置为我的标签(如本文下的示例),标签将不会出现在屏幕上,但应用程序可以正常工作。当点击按钮开始游戏时,加载游戏视图也需要一段时间(我猜这个字体正在加载?):

  label1 = [SKLabelNode labelNodeWithFontNamed:@"Arial"];

但如果我没有在我的标签上设置任何字体,应用程序只会崩溃,我会收到警告:

 *** Terminating app due to uncaught exception 'Attemped to add nil node', reason: 'Attemped to add nil node to parent: <SKScene> name:'(null)' frame:{{0, 0}, {568, 320}}'

我在这里看到了许多有字体问题的人发帖。但我只是找不到任何类似的东西。

出现错误的代码(调用秒表节点查看的函数):

-(void)addStopwatch
{

    stopwatch.position = CGPointMake(self.frame.size.width/16,self.frame.size.height);
    stopwatch = [SKLabelNode labelNodeWithFontNamed:@"Arial"];
    stopwatch.fontSize = 25;
    stopwatch.fontColor = [UIColor whiteColor];
    stopwatch.text = [NSString stringWithFormat:@"%s","00:00"];
    stopwatch.name = @"stopW";
    [self addChild:stopwatch];

 }

秒表精灵在.h文件中声明:

SKLabelNode* stopwatch;

2 个答案:

答案 0 :(得分:1)

stopwatch.position = CGPointMake(self.frame.size.width/16,self.frame.size.height);
stopwatch = [SKLabelNode labelNodeWithFontNamed:@"Arial"];

标签位于0,0位置。创建标签会创建具有默认属性的新标签。那个有位置的旧的(如果它曾经存在的话)被扔掉了。

以这种方式尝试:

stopwatch = [SKLabelNode labelNodeWithFontNamed:@"Arial"];
stopwatch.position = CGPointMake(self.frame.size.width/16,self.frame.size.height);

这也是多余的:

stopwatch.text = [NSString stringWithFormat:@"%s","00:00"];

与写作相同:

stopwatch.text = @"00:00";

答案 1 :(得分:0)

试试这个......

-(void)addStopwatch
{
    SKLabelNode *stopwatch = [SKLabelNode labelNodeWithFontNamed:@"Arial"];
    // This positions the label node in the scene
    stopwatch.position = CGPointMake(self.frame.size.width/2,self.frame.size.height/2);
    stopwatch.fontSize = 25;
    stopwatch.fontColor = [UIColor whiteColor];
    stopwatch.text = [NSString stringWithFormat:@"%s","00:00"];
    stopwatch.name = @"stopW";
    [self addChild:stopwatch];
}

编辑:问题不在于变量是全局变量。标签不可见,因为它不在场景中(y = self.frame.size.height)。您可以通过

从代码的其他部分按名称访问标签
SKLabelNode *label = (SKLabelNode *)[self childNodeWithName:@"stopW"];
label.text = ...