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

时间:2015-03-30 19:22:31

标签: ios objective-c sprite-kit

所以我的场景中有几个 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物理,或者我可以吗?

由于

3 个答案:

答案 0 :(得分:0)

我从字体大小10运行[SKAction scaleBy:到比例因子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]]];

答案 1 :(得分:0)

我使用这个类,我首先将它渲染为纹理,然后你可以将过滤模式设置为.nearest的纹理。

$request = new Request([
    'id' => 1,
    'body' => 'text'
]);

$this->validate($request, [
    'id' => 'required',
    'body' => 'required'
]);

答案 2 :(得分:-1)

以下是我对您的问题的意见。

  1. 我永远不会扩展任何东西。遵循一般准则,如果缩小规模,通常会保持质量。按比例放大会产生像素艺术感。

  2. 如果您没有使用标签节点来显示经常更改的数字,请使用SKSpriteNode。使用基本照片编辑器键入标签并将其另存为您要指定给spritenode的图像。 Spritenodes用于处理物理,因此您应该使用它们来处理所有物理。

  3. 如果你确实需要显示经常变化的大范围数字,但你仍然需要它们受物理影响,你可能会问自己,我是否应该创建一个图像,其中包含每种可能的结果分配给我的spritenode?答案是不。您可以将标签尺寸设置为比您需要的更大并缩小尺寸。要处理物理,您可以将此标签添加为某些SKSpriteNode的子项,该项目具有您希望用于标签的物理属性。现在,您有一个spritenode,可以根据需要与物理交互,还有一个显示您信息的标签节点。