0

Я пытаюсь использовать UIGestureRecognizers для перемещения спрайта внутри сцены SpriteKit. Пока он отлично перемещается, но он останавливается, как только я вынимаю палец с экрана. То, что я хочу сделать сейчас, - это перевести конец жестов в движущееся движение стиля на спрайт, чтобы он продолжался в том направлении, в котором я двигал пальцем со степенью силы, основанной на этом движении.Использование UIPanGestureRecognizer для создания спрайта SpriteKit

Вот что у меня есть, что, похоже, работает для горизонтальных движений, но продолжает посылать спрайт в неправильном направлении по оси Y.

if (recognizer.state == UIGestureRecognizerStateEnded) { 
    CGPoint velocity = [recognizer velocityInView:self.view]; 
    velocity = [self convertPointFromView:velocity]; 

    [touchedNode.physicsBody applyForce:CGVectorMake(velocity.x, velocity.y)]; 
} 

Обновление - немного больше о том, что происходит, когда я прокручиваю в настоящее время. Эффект, создаваемый сковородкой и высвобождением, приводит к тому, что спрайт перемещается в правильном направлении, но с добавленным к нему углом вниз. Проведите по экрану вниз по восходящему движению вперед и вверх, чтобы получить движение вниз.

Обновление 2 - Возможно, этот код слишком прост для достижения того, чего я хочу достичь, и я должен рассчитать, как далеко должен справиться спрайт перед применением силы, поэтому я могу дать ему определенный вектор скорости, основанный на его движениях ?

+0

Это так же просто, как обратить вспять направление y? 'speed.y * -1' –

+0

Это меняет эффект, который я вижу. –

+0

Не верно ли? –

ответ

0

Я просто решить эту проблему таким образом (быстрой):

let transformerX = 1024/self.view!.frame.size.with 
let transformerY = 768/self.view!.frame.size.height 

if (recognizer.state == .ended) { 
    let velocity = recognizer.velocity(InView:self.view) 
    touchedNode.physicsBody?.applyForce:CGVector(dx:velocity.x* transformerX, dy: velocity.y* transformerY) 
} 

Я не знаю, почему этот способ работает, просто найти его случайно. Но он действительно работает в любом размере.

0
let transformerX = 1024/self.view!.frame.size.width 
let transformerY = 768/self.view!.frame.size.height 
if (recognizer.state == .ended) { 
    let velocity = recognizer.velocity(InView:self.view) 
    touchedNode.physicsBody?.applyForce:CGVector(dx:velocity.x* transformerX, dy: velocity.y* transformerY) 
} 
Смежные вопросы