无法使SKSpriteNode的centerRect属性起作用

时间:2018-10-14 02:02:17

标签: ios swift sprite-kit skspritenode stretch

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

optimize table

我不知道我在哪里犯了错误,或者我的代码中是否缺少该错误。

This is how it looks

This is what I want

谢谢。

2 个答案:

答案 0 :(得分:0)

取决于宽度和高度,对方应变形。中心部分仅为图像的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)
        }}

enter image description here

答案 1 :(得分:0)

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

如果您在高度和宽度之间没有保持相同的比例,则size属性会更改精灵的大小,从而扭曲图像。

scale(to :)方法使用centerRect属性缩放节点。如果应用比例后的结果大于原始图像,它将使用centerRect进行缩放,而不会扭曲角。否则,它可以完全不使用更改精灵大小!

如果图像大于希望精灵覆盖的空间,则可以先应用比例,然后再调整大小(大小属性),以保持比例。

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