对于我的 SKSpriteNode,我的 SKTexture 尺寸错误

My SKTexture is size wrong for my SKSpriteNode

我在下面声明了一个 200 x 100 的框状菜单按钮 SKSpriteNode。

menuBtn.size = CGSize(width: scrWidth * 1.5, height: 100)
menuBtn.texture = SKTexture(image: UIImage(named: "menuBtn")!)

问题是,按钮的点击框仍然正确,SKTexture 的宽度很好,但 SKTexture 的高度大约是实际 menuBtn 大小的 1/2。这是一个 png,我已经检查过,精灵周围没有清晰的纹理(只有透明的 png 纹理),我做错了什么?

按钮图片:https://imgur.com/a/8BtXGLC

应用程序中的按钮图片:https://imgur.com/a/ZfW3xDL

我想要的图片:https://imgur.com/a/2zlSv8y

如果有任何影响,纹理的 png 图像大小为 1044x1044。

首先,确保将正确的大小从 GameViewController 发送到场景,在本例中为 GameScene

// without .sks

class GameViewController: UIViewController 
{
    override func viewDidLoad() 
    {
        super.viewDidLoad()

        // ...        

        if let view = self.view as! SKView?
        {
            let scene = GameScene()

            // Set the scale mode to scale to fit the window
            scene.scaleMode = .aspectFit

            // Set anchorPoint and pass scene.size
            scene.anchorPoint = CGPoint(x: 0.5, y: 0.5)
            scene.size = view.bounds.size

            // Present the scene
            view.presentScene(scene)
        }

        // ...
}

// with .sks

class GameViewController: UIViewController 
{
    override func viewDidLoad() 
    {
        super.viewDidLoad()

        // ...   

        if let view = self.view as! SKView? 
        {
            if let scene = SKScene(fileNamed: "GameScene.sks") 
            {
                // Set the scale mode to scale to fit the window
                scene.scaleMode = .aspectFit

                // Pass scene.size
                scene.size = view.bounds.size

                // Present the scene
                view.presentScene(scene)
            } 
        }

        // ...
}

在您的 GameScene 中创建对象。我建议在创建对象时使用 screenWidthscreenHeight,以便它们扩展到所有 iOS 设备。

class GameScene: SKScene 
{
    override func didMove(to view: SKView) 
    {
        // ...

        // scene width / height
        let sceneWidth = size.width
        let sceneHeight = size.height

        // object
        let menu : SKSpriteNode = SKSpriteNode()
        menu.texture = SKTexture(imageNamed: "menu")
        menu.size = CGSize(width: sceneWidth * 0.75, height: 100)
        let y_pos : CGFloat = -sceneHeight * 0.5 + menu.size.height * 0.5
        menu.position = CGPoint(x: 0, y: y_pos)
        menu.zPosition = 1
        addChild(menu)

        // ...
   }
}

我遇到的问题是我的基本图像中有额外的透明像素,我所要做的就是用 GIMP 将它们删除。