Мой SKTexture имеет неправильный размер для моего SKSpriteNode - PullRequest
0 голосов
/ 08 января 2020

У меня есть кнопка меню SKSpriteNode размером 200 x 100, объявленная ниже.

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

Проблема в том, что поле для кнопки по-прежнему правильное, а ширина SKTexture хорошая, но Высота SKTexture составляет около 1/2 размера фактического меню BTN. Это png, и я проверил, и вокруг спрайта нет четких текстур (только прозрачные png), что я делаю не так?

Pi c кнопки: https://imgur.com/a/8BtXGLC

Pi c кнопки в приложении: https://imgur.com/a/ZfW3xDL

Pi c того, как я хочу, чтобы это выглядело: https://imgur.com/a/2zlSv8y

Размер изображения png текстуры равен 1044x1044, если это оказывает какое-либо влияние.

Ответы [ 2 ]

0 голосов
/ 22 января 2020

Проблема, с которой я столкнулся, заключалась в том, что в базовом изображении были дополнительные прозрачные пиксели, все, что мне нужно было сделать, это удалить их с помощью GIMP.

0 голосов
/ 09 января 2020

Прежде всего, убедитесь, что вы отправляете правильный размер вашей сцене от 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 создайте объект , Я рекомендую работать в screenWidth и screenHeight при создании объектов, чтобы они масштабировались на все 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)

        // ...
   }
}
...