2016-12-15 4 views
2

В моей функцииСмешение вспять сенсорный событие в Swift

override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?){ 
    for touch in touches{ 
     let touchLocation = touch.location(in: self.view) 
     print("X: \(touchLocation.x) Y: \(touchLocation.y)") 
    } 
} 

я получаю обратное значение Y. Если я нажимаю вверху, я получаю значение ~ 0, и если я нажимаю внизу, я получаю большую ценность. Это делает мой спрайт im движущимся движением в неправильном направлении Y.

Однако, если я удаляю '.view' в self.view, он работает так, как должен. Кто-нибудь знает, почему это изменилось, когда я использую self.view?

+0

Какой тип 'self'? – dan

+0

@dan Это SKView ... – Whirlwind

+3

И это происходит из-за разницы между системой координат UIKit и SpriteKit. UIKit имеет 0,0 в верхнем левом углу. Таким образом, по мере того, как OP уже выяснил, использование самого себя (которое является сценой) будет работать так, как ожидалось. – Whirlwind

ответ

3

Как пояснил Whirlwind в комментарии ниже ваш вопрос, это произошло потому, что с self вы указываете SKScene (SpriteKit) и self.view использовать SKView (UIView подкласс так система UIKit):

UIKit систему координат iOS имеет начало в верхнем левом углу области чертежа, а положительные значения простираются вниз и направо от него.

SpriteKit система координат использует ту же систему координат на обоих прошивкой и OS X, имеет происхождение (0,0) в нижнем левом углу, и (1334,750) координат в верхний правый угол.

+1

SpriteKit изменил размер файлов sks по умолчанию, он больше не 1024 768 сейчас 750,1334 – Knight0fDragon

+1

@ Knight0fDragon Спасибо, сэр, я еще не знаю эту важную информацию –

Смежные вопросы