使用 SpriteKit 缩放 SkSpriteNodes

Posted

技术标签:

【中文标题】使用 SpriteKit 缩放 SkSpriteNodes【英文标题】:Scaling of SkSpriteNodes with SpriteKit 【发布时间】:2014-11-30 19:22:56 【问题描述】:

我正在开发一个游戏,我有各种可以缩放的节点。

根据设备(ipad/iphone),它们的最大尺寸在 50-128 之间(println("\(size)") 的输出),所以我假设最大尺寸应该是 3x128,对吧?

缩放时会发生以下情况:

初始大小 (0,0) 最终尺寸 (max,max) -- 这些是上面提到的尺寸

我正在使用这样的 SKAction 进行缩放:

let imageName = NameGenerator.defaultGenerator.generateAssetName(properties: properties)
let texture = SKTexture(imageNamed: imageName)
let node = SKSpriteNode(texture: texture)

let initialSize = CGSizeMake(1, 1)
let scaleFactor = max / initialSize.width
let actionScale = SKAction.scaleTo(scale, duration: duration)

node.runAction(scale)

到目前为止一切顺利。应用运行顺畅,一切正常,但是

在缩放动画期间节点高度像素化

我的资产目前仅以@3x 大小存储在300x300px

问题

什么是最佳纹理格式(png、svg、...) - 有没有使用矢量图的方法? 您认为该场景的最佳纹理尺寸是多少? 我是否正确地进行了缩放/初始化,还是应该做一些不同的事情来避免像素化?

【问题讨论】:

【参考方案1】:

如果你使用 png 文件就可以了。不支持矢量格式。如果你想使用它们,你必须将其转换为像 png 这样的位图图像格式。

就最佳纹理尺寸而言,这确实是一个反复试验以及权衡取舍的问题。

放大时,您会看到像素化。多少取决于您使用的比例因子、实际纹理本身以及您拥有的任何其他变换(例如旋转)。在确定要使用的纹理大小时,您基本上是在平衡内存与视觉质量。例如,如果您没有很多纹理,则很有可能使用较大的图像。另请注意,按比例缩小也有其缺点,例如混叠效果。

您可能想要尝试做的是确定您认为“最佳”或最常用的尺寸。并使用该尺寸作为您的 x1 比例尺寸。

游戏开发就是平衡资源/性能和用户体验。您需要尝试为您的游戏找到最佳权衡。

顺便说一句,我发现这句话有点令人困惑:

取决于设备(ipad/iphone),它们的最大尺寸介于 50-128(println(“(size)”)的输出),所以我假设最大尺寸 应该是 3x128 吧?

我不太确定你想说什么。

【讨论】:

我正在确定屏幕比例的最大尺寸,以使游戏在所有 ios 设备上运行流畅和平衡。这意味着尺寸会因所使用的设备而有所不同。

以上是关于使用 SpriteKit 缩放 SkSpriteNodes的主要内容,如果未能解决你的问题,请参考以下文章

SpriteKit Sprite 无法正确缩放

SpriteKit 捏缩放相机

带有SpriteKit的iOS通用设备应用程序,如何为所有视图缩放节点?

Sprite Kit:有没有办法禁用缩放模式并编码你想要发生的事情

SpriteKit:如何立即使用 removeAllActions 停止操作

在更新函数中使用 spriteKit 增加 spriteNode 的大小(Swift)