2016-08-10 27 views
3

私はスピードを使用してスプライトキットでゲームを作成しています。すべてのノードがシーンに収まるわけではないので、SKSceneを指で動かそうとしています。私はすでにこのコードで世界、オーバーレイ、カメラノードを作成しています。SpriteKit Swiftでカメラを移動

 override func didMoveToView(view: SKView) { 
    world = self.childNodeWithName("world")! 

    if !isCreated { 
     isCreated = true 

     // Camera setup 
     self.anchorPoint = CGPoint(x: 0.5, y: 0.5) 
     self.world = SKNode() 
     self.world.name = "world" 
     addChild(self.world) 

     self.cam = SKNode() 
     self.cam.name = "camera" 
     self.world.addChild(self.cam) 

     // UI setup 
     self.overlay = SKNode() 
     self.overlay.zPosition = 10 
     self.overlay.name = "overlay" 
     addChild(self.overlay) 
    } 

私は、1本の指でパンのジェスチャーを使用してカメラを動かすことができます。どうすればいい?どんな助けもありがとう。

答えて

3

@ Krisのソリューション(UIKitに基づいています)の代わりに、SKSceneサブクラスを使用してSprite Kitのタッチを監視することもできます。私は正しい方向にあなたを指すはずの小さなサンプルを書いた。

class YourSceneSubclass : SKScene 
{ 
    override func touchesMoved(touches: Set<UITouch>, withEvent event: UIEvent?) { 
    guard let touch = touches.first else { 
     return 
    } 

    let location = touch.locationInNode(self) 
    let previousLocation = touch.previousLocationInNode(self) 

    camera?.position.x += location.x - previousLocation.x 
    camera?.position.y += location.y - previousLocation.y 
    } 
} 

私はこれを実行せず、単に遊び場で書きました。また、他のタップ/ジェスチャーも処理したい場合は、追加のコードを記述して、認識が意図したすべてのシナリオでうまく機能するようにする必要があります。

+2

クリスのソリューションは、あなたがあなたのシナリオでは、マルチタッチを扱うことができない方が良い、プラスますよりスムーズなアニメーションとトランジションを作成するためにパン内の他の機能を使用することができます – Knight0fDragon

+0

@ Knight0fDragon UIGestureRecognizersは、touchesメソッドをオーバーライドすることによってタッチを「手動で」インターセプトするよりも堅牢で柔軟性があります。それにもかかわらず、私はこの方法を実証したかったのです。なぜなら、それは非常に簡単に実装することができ、スプライトキットのOPビューに追加する可能性があるからです。 – CloakedEddy

+0

ああ、私は完全に理解しています。私のコメントは、将来このことを見る他の人のためのもので、まずはKrisの方法を実装しようとするべきです。それはすべてです。 – Knight0fDragon

4

まず、UIPanGestureRecognizerを作成する必要があります。その後、シーンのビューに追加します。ジェスチャ認識ツールのactionメソッドでは、translationInView:を使用できます。これに基づいて、カメラのpositionを変更することができます。

また、ジェスチャ認識機能を作成する際には、タッチ数をmaximumNumberOfTouches:minimumNumberOfTouches:に設定できます。

0

あなたが水平移動は、ご希望の予想よりも反対であることが判明した場合、してみてください(スウィフト3)以下:

let panGesture = UIPanGestureRecognizer()  
var previousPoint = CGPoint.zero 

func addPanGesture() 
    { 
     self.panGesture.addTarget(self, action:#selector(BaseScene.pannedView(_:))) 
     self.panGesture.delegate = self 

     self.view?.addGestureRecognizer(self.panGesture) 
    } 
func gestureRecognizerShouldBegin(_ gestureRecognizer: UIGestureRecognizer) -> Bool 
{ 
    self.previousPoint = self.camera.position 

    return true 
} 


func pannedView(_ sender:UIPanGestureRecognizer) 
{ 
    let transPoint = sender.translation(in: self.view) 

    let newPosition = self.previousPoint + (CGPoint(x: transPoint.x * -1.0, y: transPoint.y * 1.0)) 

    self.camera.position = newPosition 
} 
関連する問題