Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 如何在SpriteKit中调整标签节点的大小?_Ios_Objective C_Sprite Kit - Fatal编程技术网

Ios 如何在SpriteKit中调整标签节点的大小?

Ios 如何在SpriteKit中调整标签节点的大小?,ios,objective-c,sprite-kit,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),CGR

因此,我的场景中有两个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物理,或者我可以吗


谢谢

我运行了一个
[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]]];

这是我对你的问题的看法

  • 我永远不会放大任何东西。按照一般原则,如果缩小,通常会保持质量。放大会产生像素艺术感

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

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


  • 我首先使用我创建的这个类将其渲染为纹理,然后您可以将过滤模式设置为最接近纹理的

    import SpriteKit
    
    public class PKTexturedLabelNode : SKSpriteNode{
        fileprivate let embeddedLabel : SKLabelNode
    
        fileprivate var rasterizingView : SKView? {
            if let rasterizeInView = rasterizeInView {
                return rasterizeInView
            } else {
                return scene?.view
            }
        }
    
        public var rasterizeInView : SKView?
    
        public required init?(coder aDecoder: NSCoder) {
            embeddedLabel = SKLabelNode()
            super.init(coder: aDecoder)
        }
    
        public init(fontNamed: String?){
            embeddedLabel = SKLabelNode(fontNamed: fontNamed)
            super.init(texture: nil, color: SKColor.white, size: CGSize(width: 0, height: 0))
        }
    
        public init(text:String?){
            embeddedLabel = SKLabelNode(text: text)
            super.init(texture: nil, color: SKColor.white, size: CGSize(width: 0, height: 0))
    
        }
    
        var fontName : String? {
            get {
                return embeddedLabel.fontName
            }
            set {
                embeddedLabel.fontName = newValue
                render()
            }
        }
    
        var fontSize : CGFloat {
            get {
                return embeddedLabel.fontSize
            }
            set {
                embeddedLabel.fontSize = newValue
                render()
            }
        }
    
        var text : String? {
            get {
                return embeddedLabel.text
            }
            set {
                embeddedLabel.text = newValue
                render()
            }
        }
    
        fileprivate func render(){
            if let texture = rasterizingView?.texture(from: embeddedLabel){
                texture.filteringMode = .nearest
                size = texture.size()
                self.texture = texture
            }
    
        }
    
    }
    

    是的,我忘记加了,但我也加了,我只是想知道有没有更快的way@Squid-使用SKLabelNode,你所能做的就是缩放或增加字体大小。是的,我也这么认为,如果你不经常使用它,它看起来会有起伏。这很聪明……还有一件事:我不知道我是否疯了,但我能让UITextView成为一个孩子吗节点,让它处理物理问题,还是要求太多。我只是喜欢玩弄这些功能,以便更熟悉框架。ThanksI没有看到太多人以相同的观点集成spritekit和UIKit的示例或教程。我通常会尽量避免这种情况,因为我相信苹果是一家公司,并且会假设他们为我们提供了更适合游戏引擎环境的工具。更具体地说,是指图形渲染的简易性。这只是基于我迄今为止所看到的这项全新技术的推测。我不是在做游戏,我是在做一个具有类似游戏功能的文本应用程序。我想疯了。我会研究一下信息技术