在我的应用中,我有一个精灵在另一个精灵周围盘旋。我希望在按住屏幕时加快此精灵的速度。我已经实现了加速功能,但是我似乎无法弄清楚为什么在单击屏幕并放开后,精灵会重置回某个位置。我有一种我知道为什么的感觉,但我已尝试解决此问题,但似乎无法进一步找到解决方案。下面的代码。
override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) {
let dx = Slider.accessibilityActivationPoint.x
let dy = Slider.accessibilityActivationPoint.y
let rad = atan2(dx, dy)
let Path = UIBezierPath(arcCenter: CGPoint(x: self.frame.width / 2, y: self.frame.height / 2), radius: 90, startAngle: rad, endAngle: rad + CGFloat(M_PI * 4), clockwise: true)
let follow = SKAction.followPath(Path.CGPath, asOffset: false, orientToPath: true, speed: 400)
//let rotate = SKAction.rotateByAngle(75, duration: 100)
Slider.runAction(SKAction.repeatActionForever(follow).reversedAction())
}
override func touchesEnded(touches: Set<UITouch>, withEvent event: UIEvent?) {
let dx = Slider.accessibilityActivationPoint.x
let dy = Slider.accessibilityActivationPoint.y
let rad = atan2(dy, dx)
let Path = UIBezierPath(arcCenter: CGPoint(x: self.frame.width / 2, y: self.frame.height / 2), radius: 90, startAngle: 9, endAngle: rad + CGFloat(M_PI * 4), clockwise: true)
let follow = SKAction.followPath(Path.CGPath, asOffset: false, orientToPath: true, speed: 150)
Slider.runAction(SKAction.repeatActionForever(follow).reversedAction())
}
func moveClockWise(){
let dx = Slider.position.x / 2
let dy = Slider.position.y / 2
let rad = atan2(dy, dx)
let Path = UIBezierPath(arcCenter: CGPoint(x: self.frame.width / 2, y: self.frame.height / 2), radius: 90, startAngle: rad, endAngle: rad + CGFloat(M_PI * 4), clockwise: true)
let follow = SKAction.followPath(Path.CGPath, asOffset: false, orientToPath: true, speed: 150)
//let rotate = SKAction.rotateByAngle(75, duration: 100)
Slider.runAction(SKAction.repeatActionForever(follow).reversedAction())
//Slider.runAction(SKAction.repeatActionForever(rotate).reversedAction())
}
最佳答案
旁注:您不应在变量上使用大写。大写为类Names保留。
例如:
let slider = Slider()
这是几乎所有编程语言都使用过的命名约定:)
无论如何..尝试做
import SpriteKit
class GameScene: SKScene {
let Slider = SKSpriteNode(color: SKColor.redColor(), size: CGSizeMake(10, 10))
override func didMoveToView(view: SKView) {
Slider.position = CGPointMake(size.width/2, size.height/2)
addChild(Slider)
}
override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) {
let dx = Slider.accessibilityActivationPoint.x
let dy = Slider.accessibilityActivationPoint.y
let rad = atan2(dx, dy)
let Path = UIBezierPath(arcCenter: CGPoint(x: self.frame.width / 2, y: self.frame.height / 2), radius: 90, startAngle: rad, endAngle: rad + CGFloat(M_PI * 4), clockwise: true)
let follow = SKAction.followPath(Path.CGPath, asOffset: false, orientToPath: true, speed: 400)
//let rotate = SKAction.rotateByAngle(75, duration: 100)
if !Slider.hasActions() {
Slider.runAction(SKAction.repeatActionForever(follow).reversedAction())
} else {
Slider.runAction(SKAction.speedTo(1, duration: 0))
}
}
override func touchesEnded(touches: Set<UITouch>, withEvent event: UIEvent?) {
Slider.runAction(SKAction.speedTo(0.4, duration: 0))
}
func moveClockWise(){
let dx = Slider.position.x / 2
let dy = Slider.position.y / 2
let rad = atan2(dy, dx)
let Path = UIBezierPath(arcCenter: CGPoint(x: self.frame.width / 2, y: self.frame.height / 2), radius: 90, startAngle: rad, endAngle: rad + CGFloat(M_PI * 4), clockwise: true)
let follow = SKAction.followPath(Path.CGPath, asOffset: false, orientToPath: true, speed: 150)
//let rotate = SKAction.rotateByAngle(75, duration: 100)
Slider.runAction(SKAction.repeatActionForever(follow).reversedAction())
//Slider.runAction(SKAction.repeatActionForever(rotate).reversedAction())
}
}