我应该如何调整SpriteKit中的标签节点?

所以我在我的场景中有几个SKLabelNodes

SKLabelNode *label1 = [SKLabelNode labelNodeWithFontNamed:@"Arial"]; label1.text = @"Hello World!"; label1.fontColor = [SKColor redColor]; label1.fontSize = 90; label1.position = CGPointMake(CGRectGetMidX(self.frame),CGRectGetMidY(self.frame)); [self addChild: label1]; 

而当场景启动时,我希望它们能够放大。 我为此使用了SKAction,但scaleBy导致文本模糊, resizeTo不起作用。

另外我猜这不是字体的方式。 有没有更好的方式做这个,或者我应该使用UILabels? 我不想这样做,因为这意味着我不能使用SpriteKit物理,或者我可以吗?

谢谢

这是我对你的问题的build议。

  1. 我永远不会扩展任何东西。 遵循一般准则,如果你缩小规模,你通常会保持质量。 扩大规模创造像素艺术的感觉。

  2. 如果您不使用标签节点来显示频繁更改的数字,请使用SKSpriteNode。 使用基本的照片编辑器键入您的标签,并将其保存为您将分配给spritenode的图像。 Spritenodes是为了处理物理,所以你应该使用它们来处理你所有的物理。

  3. 如果你需要显示经常变化的大范围的数字,但是你仍然需要它们受到物理学的影响,你可能会问自己,我是否应该创build一个图像,并将每个可能的结果分配给我的精灵? 答案是不。 您可以将标签尺寸设置为比您需要的尺寸更大,并将其缩小。 为了处理物理,你可以把这个标签作为一个SKSpriteNode的子元素来添加,这个SKSpriteNode具有你希望用于标签的物理属性。 现在,你有一个spritenode与物理交互作为你的愿望,但也有一个标签节点,显示您的信息。

我运行了一个[SKAction scaleBy:从10号字体缩放到8的比例因子,并且当以3或更大的比例增加尺寸时,文本是模糊的。

您可以使用块来随着时间的推移增加字体大小。 你将不得不使用很多步骤,但结果要好得多。

 myInt = 10; SKAction *block0 = [SKAction runBlock:^{ label0 = [SKLabelNode labelNodeWithFontNamed:@"Arial"]; label0.text = @"Hello World!"; label0.fontColor = [SKColor redColor]; label0.fontSize = myInt; label0.position = CGPointMake(CGRectGetMidX(self.frame),CGRectGetMidY(self.frame)); [self addChild: label0]; }]; SKAction *wait0 = [SKAction waitForDuration:1.5]; SKAction *wait1 = [SKAction waitForDuration:0.5]; SKAction *block1 = [SKAction runBlock:^{ label0.fontSize += (myInt + 10); }]; [self runAction:[SKAction sequence:@[wait0, block0, wait1, block1, wait1, block1, wait1, block1, wait1, block1, wait1, block1]]];