Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/465.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios SpriteKit精灵无法正确缩放_Ios_Sprite Kit_Swift3 - Fatal编程技术网

Ios SpriteKit精灵无法正确缩放

Ios SpriteKit精灵无法正确缩放,ios,sprite-kit,swift3,Ios,Sprite Kit,Swift3,我的SpriteKit游戏中的精灵,虽然比例适当,但在我的场景中被渲染得非常小。我一直在遵循一些不同的教程,使用大小相似的精灵,它们在模拟器中的缩放效果很好。下面是一些代码片段和屏幕截图。例如,屏幕右上角的“暂停”按钮非常小,但资产的实际分辨率是标准大小 斯威夫特 private let pauseTex = SKTexture(imageNamed: "PauseButton") ... private func setupPause() { pauseBtn.textur

我的SpriteKit游戏中的精灵,虽然比例适当,但在我的场景中被渲染得非常小。我一直在遵循一些不同的教程,使用大小相似的精灵,它们在模拟器中的缩放效果很好。下面是一些代码片段和屏幕截图。例如,屏幕右上角的“暂停”按钮非常小,但资产的实际分辨率是标准大小

斯威夫特

private let pauseTex = SKTexture(imageNamed: "PauseButton")    

...

private func setupPause() {
    pauseBtn.texture = pauseTex
    pauseBtn.size = pauseTex.size()
    pauseBtn.anchorPoint = CGPoint(x: 1.0, y: 1.0)
    pauseBtn.position = CGPoint(x: size.width, y: size.height)
    pauseBtn.zPosition = Layer.Foreground.rawValue
    worldNode.addChild(pauseBtn)Btn)

    ...
}
斯威夫特

override func viewWillLayoutSubviews() {
    super.viewWillLayoutSubviews()

    ...

    if let skView = self.view as? SKView {
        if skView.scene == nil {

            let aspectRatio = view.bounds.size.height / view.bounds.size.width
            let scene = MenuScene(size: CGSize(width: 750, height: 750 * aspectRatio))

            scene.scaleMode = .aspectFill
            skView.ignoresSiblingOrder = true

            ...
        }
    }
}


由于不同设备之间的分辨率差异,您的资产大小不会始终反映屏幕上所需的大小(如果
SKScene
scaleMode
设置为
resizeFill
,则情况就是如此)。如果需要精灵的特定大小,则需要将
SKNode
size
属性设置为所需的值

这在您的方法中是什么样子的:

private func setupPause() {

    pauseBtn.anchorPoint = CGPoint(x: 1.0, y: 1.0)

    // Set size property (arbitrarily selected below)
    pauseBtn.size = CGSize(width: 50, height: 50)

    pauseBtn.position = CGPoint(x: size.width, y: size.height)
    pauseBtn.zPosition = Layer.Foreground.rawValue
    worldNode.addChild(pauseBtn)

}

基本上,这里发生的事情是迈克对场景大小和屏幕大小感到困惑。他认为,由于sprite是32像素,它应该占据iPhone SE屏幕的10%,因为它的1x宽度为320(本机为640[2x]),但实际上,他的场景是750像素宽,所以它只显示了5%。 为了正确使用视网膜图形,他将场景大小改为375x667(iPhone 6的非视网膜分辨率),现在一切都应该对他有利


他现在遇到的唯一问题是iPad设备的问题。他只需要在安全区域内工作。

是否设置了节点的
size
属性?您需要设置场景大小以匹配设备上窗口的大小,然后设置对象,使其大小与屏幕的实际大小相关(百分比很容易)。你必须明确地设置它。1x 2x和3x图形的大小是多少,它们必须是正确的倍数不要按照@MoDJ所说的做,这是最糟糕的处理方式it@MoDJ,spritekit有scaleMode是有原因的,您设计为1个尺寸,系统为您缩放。不需要进行无数次的除法运算,这样你就可以很容易地搞乱数学运算并浪费时间调试。除了resizeFill或fake resize fill(假调整大小填充)的情况外,这是不正确的,这会使按钮大小在各种屏幕上不成比例sizes@Night0fDragon,你说得对,我本来可以解释得更好。但是,这并没有改变这样一个事实,即
size
属性和
setScale()
方法都没有设置,而且他完全依赖于资源的原始大小/比例(这显然不是所需的比例)。我们这里缺少很多信息,比如scaleMode、场景大小以及所有3个资产的大小一秒骑士,将用更多信息更新问题@Knight0fDragon我已经添加了您要求的信息。