SKSpriteNode 没有正确缩放

Posted

技术标签:

【中文标题】SKSpriteNode 没有正确缩放【英文标题】:SKSpriteNode not scalling properly 【发布时间】:2016-04-23 00:46:46 【问题描述】:

我正在使用 Swift 和 SpriteKit 开发一个小游戏。当我为重新启动按钮添加SKSpriteNode 时,它无法正确缩放。

重启按钮的高度和宽度均为 100px。如果我不设置 scale ,它将覆盖整个屏幕并使屏幕显示为白色。我发现如果我将setScale 设置为 0.005,那么它只会出现在屏幕上,但尺寸不合适。

import Foundation
import SpriteKit

class EndScene: SKScene 

    var restartBtn = SKSpriteNode()


    override func didMoveToView(view: SKView) 

        background()
        restartGame()

    


    func restartGame() 

        restartBtn = SKSpriteNode(imageNamed: "restartBtn")
        restartBtn.setScale(0.005)
        restartBtn.position = CGPoint(x: self.size.width / 2, y: self.size.height / 4)
        restartBtn.zPosition = 1

        self.addChild(restartBtn)
    


    func background() 

        let bkg = SKSpriteNode(imageNamed: "Background")
        bkg.size = self.frame.size
        bkg.position = CGPoint(x: self.frame.width / 2, y: self.frame.height / 2)
        bkg.zPosition = -2

        self.addChild(bkg)
    


这是这段代码的输出, Restart Button Output

更新

我将scene!.scaleMode = .AspectFill 放在didMoveToView 函数中,它有助于正确渲染SpriteNode 的形状。但我仍然必须setScale(0.001) 才能使重新启动按钮的大小适合屏幕。谁能帮助我我仍然缺少哪一行代码?

【问题讨论】:

【参考方案1】:

不要使用 .setScale 尝试使用 restartBtn.size = CGSize(Width: 50, Height: 50)

这使用 Sprite Kit 的调整大小公式。

【讨论】:

我也已经尝试过了,但它并没有给出任何不同的结果。要使用 CGSize,我必须将宽度和高度设置为 '0.1' 以使其在屏幕上可见,并且它仍然呈现为椭圆形而不是圆形。【参考方案2】:

我也遇到过这个。它发生在我忘记指定场景的大小时。我没有调用initWithSize,而是写了init,场景开始将所有节点缩小1000倍。节点是可见的,但它们需要 0.001 的比例

【讨论】:

以上是关于SKSpriteNode 没有正确缩放的主要内容,如果未能解决你的问题,请参考以下文章

我的 SKSpriteNode 速度值未正确更新

缩放 SKSpriteNode 而不缩放其子节点

SKSpriteNode 的正确子类化和实例初始化

如何在Swift中正确地从父节点中删除SKSpriteNode的子类(要从数组中移除,屏幕上的空格......)?

如何在 SKSpriteNode 中正确封装触摸事件处理并将数据传回 SKScene

ListView 动画未正确缩放