Я создаю настраиваемый компонент, фреймворк, чтобы реализовать его в моих будущих проектах по разработке игр; джойстик.
Джойстик должен появляться, когда пользователь касается экрана, внутренняя ручка перемещается при изменении касания и, наконец, исчезает, когда касания заканчиваются.
Написание компонента, который отвечает на это поведение, не является большой проблемой; однако я хотел бы делегировать как можно больше «сырого» контроля от пользователя и реализовать методы, которые реагируют на прикосновения, без необходимости вручную переопределять методы UIResponder
touchesBegan
и т. д.
То, что я сделал, работает до сих пор: я расширил SKScene
публичным расширением в рамках, которое переопределяет методы touches
и вызывает статические методы, которые обновляют положение джойстика на экране в зависимости от текущего прикосновения и события.
Есть небольшой нюанс, который я пытаюсь решить; вот мой код:
public extension SKScene {
override open func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
super.touchesBegan(touches, with: event)
Joystick.touchesBegan(touches, with: event)
}
}
XCode хочет, чтобы метод touchesBegan
обязательно имел модификатор open
, но наименее ограничительный модификатор, который может использовать расширение, - public
; XCode выдает предупреждение, которое гласит:
Модификатор 'open' конфликтует с доступным по умолчанию расширением 'public'
Есть ли способ решить эту проблему? Можно ли считать мою реализацию плохим проектом, и если да, то есть ли другой способ достичь этого результата, не заставляя пользователя вручную реализовывать и переопределять методы touches
? Спасибо.