SKAction Moveto未在期限内完成?

时间:2017-07-10 18:09:25

标签: ios swift sprite-kit skaction

我正在努力制作类似时钟的东西。

我从NSDate拉出会议记录。

然后稍微计算一个弧度值并找到我的精灵应该在1分钟内移动到的XY位置,

然后在下一分钟的开始,我计算下一个XY位置,我的精灵应该在那个分钟内移动。

所以我在更新功能

中有这些代码
//Get Current Minute
var currentTime = NSDate();
var nowCal = NSCalendar(calendarIdentifier: NSCalendar.Identifier.ISO8601)
var currMin = nowCal?.component(.minute, from: currentTime as Date)

//Print current minute        
print(currMin)

// slicing the circle into 60 segments and getting which angle in radians the sprite should move to in the next min
var minAng = (2*CGFloat.pi)/60 * CGFloat(currMin!)

//calculating point on the circle where the sprite should move to in the next min        
var newPt = CGPoint(x: (300 * cos(minAng)), y: -(300 * sin(minAng)))

//print out where the sprite currently is and where it should move to 
print(hand.position)
print(newPt)


//move the sprite to the new location over 60 seconds, making sure the movement is linear        
let moveHand = SKAction.move(to: newPt, duration: 60)
moveHand.timingMode = SKActionTimingMode.linear
hand.run(moveHand)

//move another placeholder sprite to the final destination instantly to visualise movment by waiting for the moving sprite.
handToBe.run(SKAction.move(to: newPt, duration: 0))

假设我正确地理解了所有内容,它应该在1分钟内穿过该片段,在需要移动到下一个片段之前到达片段的末尾。

然而,在我需要移动到下一个段之前,我的精灵永远不会到达段的末尾。打印输出显示它总是太慢。

有什么我不理解SKAction.move(to:),或者在这种情况下我的逻辑是否有缺陷?

1 个答案:

答案 0 :(得分:1)

尝试从update函数中删除代码,然后在您自己调用的函数中运行它。 update每帧被调用,因此精灵开始移动,然后下一帧被告知移动到另一个位置,因此它现在有两个需要同时运行的移动动作。之后的框架有3个需要运行的移动动作,等等。这可能意味着它永远不会真正到达其第一个预期位置,因为同时影响它的其他移动动作。