У меня есть объект, который нужно перемещать вверх и вниз по экрану. Когда вы сначала нажимаете кнопку, она перемещается вниз по экрану до конечной точки продолжительностью 3 секунды. Вы можете щелкнуть в любое время, чтобы остановить его от перемещения вниз и заставить его начать движение до другой конечной точки, снова в течение 3 секунд. Проблема с этим заключается в том, что если вы нажмете, чтобы переместить объект вниз, но затем сразу же нажмите снова, чтобы переместить его, объект движется вверх, но очень медленно, потому что он имеет продолжительность 3 секунды. (Надеюсь, это имеет смысл). Поэтому я хочу прекратить использовать продолжительность, чтобы установить темп/скорость, с которой движется объект. Есть ли способ сказать перейти к точке x.y на пустой скорости? Спасибо. (Независимо от того, где объект и должен перейти на Я хочу, чтобы всегда двигаться в том же темпе.)Перемещение объекта по экрану с определенной скоростью. (Sprite Kit)
Это то, что я использую, чтобы переместить объект прямо сейчас:
func moveObject(){
let endpoint = CGPoint(x: self.size.width/2 , y: self.size.height/1.8888888888)
let moveObject = SKAction.moveTo(endpoint, duration: 3.0)
let moveObjectSequence = SKAction.sequence([moveLine])
Object.runAction(moveLineSequence)
}
код после исправления :
func dropLine(){
if hookNumber == 1{
let endpoint = CGPoint(x: self.size.width/2 , y: self.size.height/1.8888888888)
let moveLine = SKAction.moveTo(endpoint, duration: getDuration(fishLine.position,pointB:endpoint,speed:300.0))
let moveLineSequence = SKAction.sequence([moveLine])
fishLine.runAction(moveLineSequence)
}
}
func dropHook(){
if hookNumber == 1{
let endpoint = CGPoint(x: self.size.width/2 , y: self.size.height - 2030)
let moveLine = SKAction.moveTo(endpoint, duration: getDuration(fishHook.position,pointB:endpoint,speed:300.0))
let moveLineSequence = SKAction.sequence([moveLine])
fishHook.runAction(moveLineSequence)
hookNumber = 2
}
}
func raiseLine(){
if hookNumber == 2{
let endpoint = CGPoint(x: self.size.width/2 , y: 3050)
let moveLine = SKAction.moveTo(endpoint, duration: getDuration(fishLine.position,pointB:endpoint,speed:300.0))
let moveLineSequence = SKAction.sequence([moveLine])
fishLine.runAction(moveLineSequence)
}
}
func raiseHook(){
if hookNumber == 2{
let endpoint = CGPoint(x: self.size.width/2 , y: self.size.height - 3)
let moveLine = SKAction.moveTo(endpoint, duration: getDuration(fishHook.position,pointB:endpoint,speed:300.0))
let moveLineSequence = SKAction.sequence([moveLine])
fishHook.runAction(moveLineSequence)
}
}
@AlessandroOmano Я сделал это и решил проблему. Благодарю. Но это создало странный сбой. Сбой очень сложно объяснить, поэтому я собираюсь прикрепить ссылку к видео, которое показывает, что происходит сбой. Я также включу необходимый код. Вот ссылка на видео с ошибкой: https: //www.youtube.com/watch? V = jHE5RC-mvwU Сбой раньше не встречался. Вы знаете, почему это происходит, и если да, то что мне нужно сделать, чтобы остановить это? Я также добавлю новый код в исходное сообщение. – james
Я видел как видео, так и ваш код. У меня такой опыт, когда я использовал такие великие ценности, как ты. Если вы сейчас, например, ваш топ равен self.frame.height-20, чтобы спрятать мяч, попробуйте использовать конечный результат, равный, например, self.frame.height + 40, не используйте гигантские значения, потому что вы могли бы типичный тип сбойного видео, то же самое применимо к нижней части –
Ок. Когда вы говорите «гигантские ценности», вы имеете в виду конечные точки. Если это так, я изменил конечную точку на self.frame.height + 40, и глюк все же произошел. – james