Я работаю с Swift 3, SpriteKit и Xcode.Каков наилучший способ масштабирования и удаления узлов?
Итак, у меня есть узел с именем backgroundNode, и я привязываю каждый узел своей игры к этому backgroundNode.
Теперь я хотел бы иметь возможность масштабировать мою игру с помощью жесткого щели, и когда я увеличусь, чтобы перемещаться в своей игре.
Я вижу 2 возможности сделать это:
- deplace фона узла и изменять его масштаб, чтобы увеличить и уменьшить масштаб,
- использование SKCameraNode
Что вы думаете, является лучший вариант?
Я уже пробовал первый вариант, но жест увеличения довольно сложный, как если бы я масштабировал backgroundNode, когда хочу увеличить, точка привязки находится в 0; 0, а не 0,5; 0,5, поэтому он не увеличивает масштаб, жест обнаруживается, но из нижнего правого угла я не знаю, видите ли вы, что я имею в виду.
И для второго варианта я не могу переместить камеру, не имея глючного эффекта, может быть, мой код неправильный, но это действительно кажется правильным.
Вы можете мне помочь?
Edit: Так что я получил это работает, используя SKCameraNode
и UIPanGestureRecognizer
, вот код:
var cam: SKCameraNode!
let panGesture = UIPanGestureRecognizer()
override func didMove(to view: SKView)
{
cam = SKCameraNode()
camera = cam
cam.position = CGPoint(x: playableRect.midWidth, y: playableRect.midHeight)
addChild(cam)
let panGesture = UIPanGestureRecognizer(target: self, action: #selector(GameScene.panFunction))
view.addGestureRecognizer(panGesture)
}
func panFunction(pan : UIPanGestureRecognizer)
{
let deltaX = pan.translation(in: view).x
let deltaY = pan.translation(in: view).y
cam.position.x -= deltaX
cam.position.y += deltaY
pan.setTranslation(CGPoint(x: 0, y: 0), in: view)
}
Сейчас я борюсь с Zoom. Я попытался с помощью UIPinchGestureRecognizer
, но он не работает так хорошо, как панорамирование жест, вот что я пробовал:
var firstPinch: CGFloat = 0
var pinchGesture = UIPinchGestureRecognizer()
let panGesture = UIPanGestureRecognizer()
var cam: SKCameraNode!
override func didMove(to view: SKView)
{
let pinchGesture = UIPinchGestureRecognizer(target: self, action: #selector(GameScene.pinchFunction))
view.addGestureRecognizer(pinchGesture)
let panGesture = UIPanGestureRecognizer(target: self, action: #selector(GameScene.panFunction))
view.addGestureRecognizer(panGesture)
}
func pinchFunction(pinch : UIPinchGestureRecognizer)
{
if UIGestureRecognizerState.began == pinch.state
{
firstPinch = pinch.scale
}
actualPinch = pinch.scale
cam.xScale -= actualPinch - firstPinch
cam.yScale -= actualPinch - firstPinch
}
Как бы вы это сделать?
Опубликовать текущий код для опции 2 (SKCameraNode). Так я и пошла бы по этому поводу. В качестве альтернативы, отправьте код для обеих попыток и выберите, с каким мы должны помочь с – Nik
FYI: Если у вас есть вариант 1 для работы, попробуйте найти способ изменить anchorPoint на 0.5.0.5. Обычно это просто связано с изменением позиции – Nik
@Nik Я просто разместил код, я думаю, что опция SKCameraNode сделает это лучше, но я не могу заставить его работать – Drakalex