使用 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/