ios - 调整和缩放 SKSpriteNode

标签 ios swift resize sprite-kit

我的 iOS 游戏中有多个游戏对象,其中一些的分辨率比其他的高。用于游戏对象的图形是在运行时随机选择的。我想确保它们在使用时都不会超过一定的尺寸,所以我设计了以下算法:

while self.spriteNode.rSize.width > 100 && self.spriteNode.rSize.height > 100 {
    self.xScale -= 0.01
    self.yScale -= 0.01
}

其中 spriteNode 是纹理为图形的对象,rSize 是 SKSpriteNode 上的扩展计算属性,返回节点累积帧的大小。

通常,这会导致无限循环。有什么问题?

更新 1

根据 LearnCocos2D 的评论,我尝试了以下方法:

let reqXScale = 50/self.spriteNode.rSize.width
let reqYScale = 50/self.spriteNode.rSize.height
self.xScale = reqXScale
self.yScale = reqYScale

虽然这解决了无限循环问题,但一些对象被挤压而不是保持其原始纵横比。

此外,这是定义 rSize 的代码:

var rSize: CGSize {
    return self.calculateAccumulatedFrame().size
}

我以前多次可靠地使用过它。

最佳答案

我想通了。我使用的是随机宽度,因为这是我需要的。

// Scaling
let aspectRatio = self.spriteNode.rSize.width/self.spriteNode.rSize.height
let randWidth = CGFloat(rand(60, 90))
self.spriteNode.size = CGSize(width: randWidth, height: randWidth/aspectRatio)

关于ios - 调整和缩放 SKSpriteNode,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27087246/

相关文章:

ios - 在呈现的 AVPlayerViewController 中循环 AVPlayerItem

java - 在 Swing 中平均调整两个 ScrollPanes 的大小

jquery - 仅在较小的屏幕上切换导航

ios - 当单元格被重用时,我在 TableViewCell 中的心脏按钮状态被保存

iphone - 显示 CALayer 动画的帧速率 (FPS)

ios - 为什么 Google 登录用户没有显示在用户池中?

ios - 如何使用 xcode 6.4 支持 iOS 7.0?

ios - clearButton 在 UITextEditField 中不起作用

swift - 在 do{}catch{} 之外使用变量/常量 - swift2

php - "Crop"图像适合容器尽可能接近所需的大小而不损失比例