我正在努力制作类似时钟的东西。
我从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:)
,或者在这种情况下我的逻辑是否有缺陷?
答案 0 :(得分:1)
尝试从update
函数中删除代码,然后在您自己调用的函数中运行它。 update
每帧被调用,因此精灵开始移动,然后下一帧被告知移动到另一个位置,因此它现在有两个需要同时运行的移动动作。之后的框架有3个需要运行的移动动作,等等。这可能意味着它永远不会真正到达其第一个预期位置,因为同时影响它的其他移动动作。