1

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

  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;
4

2 回答 2

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";
于 2014-11-04T22:03:22.417 回答
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 = ...
于 2014-11-05T03:57:12.153 回答