使用SpriteKit,Swift 2,Xcode
我尝试在调用Node之后尝试更改其中一个大小,即使它不是唯一的(还有一大堆)。
在不那么容易混淆的条款中,我试图改变节点的大小,而不是在初始声明中这样做。这就是我的尝试:
self.childNodeWithName("player")?.size.width = 10
然而,由于childNodeWithName返回的是Node而不是SKSpriteNode,因此无法正常工作。由于节点无法访问"尺寸,"这个解决方案不起作用。我也尝试过使用
self.childNodeWithName("player")?.setScale(0.5)
现在问题在于我无法将其作为数字引用。我每次打电话时都试图不断缩小它的大小,但我也需要能够将它的大小作为一个数字来引用。据我所知,setScale没有提供这种功能。
任何想法? 谢谢!
答案 0 :(得分:1)
当然,您可以为该节点设置变量。也将它转换为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)
这只是用于找到新的所需大小(在您的情况下,将区域切成两半)之间的比率的一些数学,然后它通过该值调整新的比例。使用setScale时,物理体随之变化。