ios - 引用/更改节点的大小(在调用它之后)

标签 ios swift sprite-kit

使用 SpriteKit、Swift 2、Xcode

我试图在调用节点后更改其中一个节点的大小,即使它不是唯一的(有很多)。

用不那么令人困惑的术语来说,我试图在不在初始声明中执行的情况下更改节点的大小。这是我尝试过的:

self.childNodeWithName("player")?.size.width = 10

但是这不起作用,因为 childNodeWithName 返回一个节点而不是 SKSpriteNode。由于节点无法访问“大小”,因此该解决方案不起作用。我也尝试过使用

self.childNodeWithName("player")?.setScale(0.5)

现在的问题是我无法将其作为数字引用。每次我调用它时,我都试图将它的大小连续减半,但我还需要能够将它的大小作为一个数字来引用。据我所知,setScale 不提供此功能。

有什么想法吗? 谢谢!

最佳答案

当然,您可以为该节点设置一个变量。也将它转换到 SKSpriteNode。然后你可以做任何 SKSpriteNode 可以做的事情。这是一个简单的测试用例:

let aNode = SKSpriteNode(color: UIColor.blue, size: CGSize(width: 10, height: 10))
aNode.name = "test"
aNode.zPosition = 10
addChild(aNode)

let theNode = childNodeWithName("test") as! SKSpriteNode
theNode.setScale(40)
print(theNode.size) // prints (400, 400)

如果你需要物理体随之改变的解决方案:

let player = childNodeWithName("player") as! SKSpriteNode
let originalArea: CGFloat = player.size.width*player.size.width
let newArea: CGFloat = originalArea / 2.0
let newLength: CGFloat = CGFloat(sqrt(Double(newSize)))

var newScale = newLength/player.size.width
newScale *= player.xScale
player.setScale(newScale)

这只是一些数学计算,用于找到新的所需大小(在您的情况下,将 area 减半),然后根据该值调整新比例。使用 setScale 时,物理体会随之改变。

关于ios - 引用/更改节点的大小(在调用它之后),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35074546/

相关文章:

ios - Monotouch uialertview 大小问题

iphone - 从一个 View 到同一类的另一个 View 的 UINavigation 崩溃,如何解决?

ios - 为什么我的 UISlider 没有动画?

ios - 从用户通知中打开设置URL?

ios - 集成 AWS 身份验证以通过 StackMob 下载 URL

swift - 架构 i386 的 undefined symbol : "_OBJC_CLASS_$_SecIdentity"

swift - 停止录制视频后调用委托(delegate)方法

ios - 通过触摸在枚举状态之间切换

swift - 在靠近特定点时降低节点速度

ios - 从 Plist 转换 CGPoint