Swift-Scale SKAction不起作用

时间:2017-01-21 19:01:59

标签: swift xcode scaling skspritenode skaction

我在弄清楚为什么我的精灵没有在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()

运行时,所有精灵重新定位都会进行计划,并且它们都会移动到中心。但在那之后绝对没有任何反应。我声明签名变量的行是否有问题,决定它们是增长还是缩小?因为目前他们都没有这样做,所以如果有人知道不需要发生什么,我会非常感激。提前谢谢。

1 个答案:

答案 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()
}