SpriteKit Sprite 无法正确缩放
Posted
技术标签:
【中文标题】SpriteKit Sprite 无法正确缩放【英文标题】:SpriteKit Sprites Not Scaling Properly 【发布时间】:2016-12-06 18:45:34 【问题描述】:我的 SpriteKit 游戏中的精灵虽然缩放得当,但在我的场景中渲染得非常小。我一直在使用类似大小的精灵关注一些不同的教程,并且它们在模拟器中可以很好地缩放。下面是一些代码sn-ps和截图。例如,屏幕右上角的暂停按钮非常小,但资产的实际分辨率是标准尺寸。
GameScene.swift
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)
...
GameVC.swift
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
...
【问题讨论】:
你设置了节点的size
属性了吗?
您需要设置场景的大小以匹配设备上窗口的大小,然后设置您的对象,使大小与屏幕的实际大小相关(百分比简单)。您必须明确设置它。
你的 1x 2x 和 3x 图形的尺寸是多少,它们需要是正确的倍数
不要像@MoDJ 所说的那样做,这是最糟糕的使用方式
@MoDJ,spritekit 有 scaleMode 是有原因的,你为 1 尺寸设计,系统为你缩放。无需无数次除法,很容易搞砸数学,浪费时间调试
【参考方案1】:
基本上这里发生的事情是 Mike 对场景大小和屏幕大小感到困惑。他在想,既然精灵是 32 像素,它应该占据 iPhone SE 屏幕的 10%,因为它的 1x 宽度为 320(本机是 640 [2x]),但实际上,他的场景是 750 像素宽,所以它只显示为 5%。 他将场景大小更改为 375x667(iPhone 6 非视网膜分辨率)以正确使用视网膜图形,现在一切都应该适合他了。
他现在要遇到的唯一问题是在 iPad 设备上进行裁剪。为此,他只需要在安全区域工作即可。
【讨论】:
【参考方案2】:由于不同设备之间的分辨率差异(如果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)
【讨论】:
这是不正确的,除非在 resizeFill 或假的 resize fill 的情况下,这会使按钮大小在各种屏幕尺寸上不成比例 @Night0fDragon,你是对的,我本可以更好地解释这一点。然而,这并没有改变size
属性和setScale()
方法都没有设置的事实,并且他完全依赖于资源的原始大小/比例(这显然不是所需的比例)。跨度>
我们在这里遗漏了很多信息,例如 scaleMode、场景大小和所有 3 个资产的大小
一秒骑士,将用更多信息更新问题!
@Knight0fDragon 我已经添加了您要求的信息。以上是关于SpriteKit Sprite 无法正确缩放的主要内容,如果未能解决你的问题,请参考以下文章
Sprite不会用手指/ SpriteKit / Swift 3移动
Sprite Kit 中的 AVAudioPlayer“加载资源失败”原因资源“无法加载 sound.caf”