2017-01-21 24 views
0

我在搞清楚为什么我的精灵不能在Swift 3和Xcode 8中缩放。我有3个相同的精灵,ball1,ball2和ball3,都在我的GameScene的中心.sks并在游戏运行时完全可见。这是相关的代码;Swift-Scale SKAction not working

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

难道说你的规模行动刚刚返回的值为1,因此不能缩放?不知道“分数”是如何工作的,我很难确切地知道'scaleFactor'会是什么。我能想到的唯一的其他事情,应该是显而易见的,就是你需要在某个时候调用'myFunction()'以获得该块的执行,尽管我相信你已经知道了。 此外 - 为什么这是标题和旋转标记,当它直接与缩放有关? – Dan

+0

所有优点,谢谢。我已经修复了最后调用函数的问题,标题和标签与其他一些问题混为一谈,希望现在所有问题都解决了。得分总是从0开始的一个整数,所以应该不可能有1的值。尽管谢谢你的建议,但这似乎并不是我的问题。 –

回答

0

好吧,我想我知道这个问题!

首先,CGPoint(x: 0, y: 0)实际上是您的SKView最左上角的点。要在屏幕中心创建节点,您需要执行CGPoint(x: self.size.width/2, y: self.size.height/2)以将节点放置在屏幕的中心。

现在,要执行的代码,你需要调用myFunctiondidMove功能(相当于viewDidLoad)内,像这样:

override func didMove(to view: SKView) 
{ 
    myFunction() 
} 
+0

再次感谢您的建议,但它们似乎没有改变任何内容。仍然没有一个规模。你对我的观点中心所说的话也很有趣,但是0,0确实成功地将我的精灵移动到了中心。我想知道Xcode 8或其他版本最近是否发生了变化。 –