无法让 SKSpriteNode 的 centerRect 属性 工作

Cannot get SKSpriteNode's centerRect property to work

很简单。我按照 Apple 文档中的描述设置了精灵的 centerRect,但它显示的图像变形了(因为我没有定义 centerRect 属性)。我的代码:

let sprite = SKSpriteNode()
sprite.texture = SKTexture(imageNamed: "ImageName")
sprite.centerRect = CGRect(x: 0.49, y: 0.49, width: 0.02, height: 0.02)
sprite.scale(to:CGSize(width: myCustomWidth, height: myCustomHeight))
//sprite.size = CGSize(width: myCustomWidth, height: myCustomHeight)

我不知道我哪里出错了,或者我的代码中是否缺少某些东西。

This is how it looks

This is what I want

提前致谢。

取决于宽高是多少,对应的应该是扭曲的。中心部分仅占图像的 2% * 2%,是缩放操作期间的主要缩放部分。

你可以想象四个角不会改变,所以如果缩放到原始图像的(2X * 2X),即从(0.02 * 0.02 - > 1.02 * 1.02),中心部分会扭曲很多,那就是图像中心失真超过 2500 倍。

你的代码没有问题。

到目前为止,这个概念是正确的。如果你不能得到你想要的,可能是你的原始图像大小。

sprite.texture = SKTexture(imageNamed: "ImageName")
print (sprite.texture?.size()) // If size is very large here, then you cannot get what you want. The size of image should be small than target.  Actually only when you zoom in the texture, i.e, the current size is smaller than CGSize(width: myCustomWidth, height: myCustomHeight), you may get the result.

sprite.centerRect = CGRect(x: 0.49, y: 0.49, width: 0.02, height: 0.02)
sprite.scale(to:CGSize(width: myCustomWidth, height: myCustomHeight))
sprite.size = CGSize(width: myCustomWidth, height: myCustomHeight)

最后一部分是我的测试代码。

 class TestViewController: UIViewController{


        @IBOutlet weak var skview: SKView!

        override func viewDidAppear(_ animated: Bool) {
            super.viewDidAppear(animated)
            let sprite1 = SKSpriteNode()
            sprite1.texture = SKTexture(imageNamed: "round.png")
            print (sprite1.texture?.size())
            sprite1.centerRect = CGRect(x: 0.49, y: 0.49, width: 0.02, height: 0.02)
            print (sprite1.size)
            sprite1.scale(to:CGSize(width: 300, height:100))
            sprite1.size = CGSize(width: 300, height: 100)
            print (sprite1)
            skview.scene?.addChild(sprite1)
        }}

我终于找到了解决问题的方法。实际上是关于 scale(to:) 方法和大小 属性 的工作原理。

我的问题是关于如何根据大小 属性 定义 myCustomWidth 和 myCustomHeight。这些值属于区间 ((0,0),(0,0)) 到 ((1,1),(1,1)) 所以我告诉计算机缩小图像。因此 centerRect 属性 无法应用,因为图像没有放大。 因此,在缩放函数中使用大于图像大小的值并设置实际大小 属性 以获得屏幕上所需的大小,问题就解决了。

下面深入讲解一下:

大小 属性 会改变精灵的大小,如果您不保持相同的高度和宽度比例,图像就会变形。

scale(to:) 方法使用 centerRect 属性 缩放节点。如果应用缩放后的结果大于原始图像,它将使用 centerRect 缩放而不扭曲角。否则它可能会改变精灵大小 而无需 应用 centerRect!

如果您的图像大于 space 您希望精灵覆盖,您可以先应用缩放,然后调整大小(大小 属性)并保持比例。

如有任何疑问,(或更正)我很乐意为您提供帮助。