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