2016-11-20 9 views
2

Я работаю с 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 
} 

Как бы вы это сделать?

+0

Опубликовать текущий код для опции 2 (SKCameraNode). Так я и пошла бы по этому поводу. В качестве альтернативы, отправьте код для обеих попыток и выберите, с каким мы должны помочь с – Nik

+0

FYI: Если у вас есть вариант 1 для работы, попробуйте найти способ изменить anchorPoint на 0.5.0.5. Обычно это просто связано с изменением позиции – Nik

+0

@Nik Я просто разместил код, я думаю, что опция SKCameraNode сделает это лучше, но я не могу заставить его работать – Drakalex

ответ

0

Необходимо ввести код. Я помог кому-то с этим в другом форуме. Их код + мой ответ должен дать общее представление о том, что делать:

https://forums.developer.apple.com/message/192823#192823

В основном это связано UIPanGestureRecognizer и т.д., а затем немного дельта-шкалы логики для корректировки новых границ камеры.

+0

Хорошо, поэтому мне удалось правильно перемещать камеру с помощью UIPanGestureRecognizer благодаря Ваше сообщение. Теперь, как я могу использовать UIPinchGestureRecognizer для правильной масштабирования камеры? – Drakalex