我在弄清楚为什么我的精灵没有在Swift 3和Xcode 8中缩放时遇到了一些麻烦。我有3个相同的精灵,ball1,ball2和ball3,都在我的GameScene.sks的中心,当完全可见时游戏运行。这是相关的代码;
var ball1 = SKSpriteNode()
var ball2 = SKSpriteNode()
var ball3 = SKSpriteNode()
var signature = Double()
var scaleFactor = Double()
var score = Double()
let signatureOptions = [1, -1]
ball1 = self.childNode(withName: "ball1") as! SKSpriteNode
ball2 = self.childNode(withName: "ball2") as! SKSpriteNode
ball3 = self.childNode(withName: "ball3") as! SKSpriteNode
func myFunction() {
ball1.position = CGPoint(x: 0, y: 0)
ball2.position = CGPoint(x: 0, y: 0)
ball3.position = CGPoint(x: 0, y: 0)
signature = Double(arc4random_uniform(UInt32(Double(signatureOptions.count))))
scaleFactor = 35 / (0.5 + (score / 20))
let scaleBall2 = SKAction.scale(by: CGFloat(((100 + scaleFactor) * signature) / 100), duration: 1)
let scaleBall3 = SKAction.scale(by: CGFloat((((100 + scaleFactor) * signature) / 100) * -1), duration: 1)
ball2.run(scaleBall2)
ball3.run(scaleBall3)
}
myFunction()
运行时,所有精灵重新定位都会进行计划,并且它们都会移动到中心。但在那之后绝对没有任何反应。我声明签名变量的行是否有问题,决定它们是增长还是缩小?因为目前他们都没有这样做,所以如果有人知道不需要发生什么,我会非常感激。提前谢谢。
答案 0 :(得分:0)
好的,我想我知道这个问题!
首先,CGPoint(x: 0, y: 0)
实际上是SKView
左上角的点。要在屏幕中心创建节点,您需要CGPoint(x: self.size.width/2, y: self.size.height/2)
将节点放在屏幕的中心。
现在,要执行代码,您需要在myFunction
函数内部调用didMove
(相当于viewDidLoad
),如下所示:
override func didMove(to view: SKView)
{
myFunction()
}