2015-09-21 14 views
6

私はこれを理解できないようです。私はいろいろなことを試みましたが、どれもうまくいかないようです。私の現在のコードでは、カメラとヒーローが一直線になることはなく、スクリーンに触れるとシーンはかなり遠くに飛び出しそうです。私がしたいのは、主人公がタッチポイントに移動してカメラが彼に従ってもらうためにスクリーンに触れるときだけです。カメラを英雄のスプライトノードにロックする方法はありますか?SKCameraNodeにヒーローに従うようにしてください。スプライトノード

import SpriteKit 


let tileMap = JSTileMap(named: "level2.tmx") 
let hero = SKSpriteNode(imageNamed: "hero") 
let theCamera: SKCameraNode = SKCameraNode() 

class GameScene: SKScene { 
    override func didMoveToView(view: SKView) { 
     /* Setup your scene here */ 

     self.anchorPoint = CGPoint(x: 0, y: 0) 
     self.position = CGPoint(x: 0, y: 0) 

     hero.position = CGPoint(x: CGRectGetMidX(self.frame), y: CGRectGetMidY(self.frame)) 



     hero.xScale = 0.5 
     hero.yScale = 0.5 
     hero.zPosition = 2 

     tileMap.zPosition = 1 


     tileMap.position = CGPoint(x: 0, y: 0) 
     self.addChild(tileMap) 
     self.addChild(hero) 
     self.addChild(theCamera) 

     self.camera = theCamera 


    } 

    override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) { 
     /* Called when a touch begins */ 

     for touch in touches { 

      let location = touch.locationInNode(self) 

      let action = SKAction.moveTo(location, duration: 1) 

      hero.runAction(action) 



     } 

      } 

    override func update(currentTime: CFTimeInterval) { 
     /* Called before each frame is rendered */ 

     self.camera?.position = hero.position 
    } 
} 
+0

あなたは画面をタッチすると、あなたが意味しますか「主人公」があなたが触れた場所に移動し、「カメラ」が「主人公」に従う/整列する。その結果、「ヒーロー」はまだ画面の中央に表示されますか? – WangYudong

+0

はい、それはまさに私が意味するものです。 – Bill

答えて

5

シーンを見た理由は、かなり遠くに飛び込んだscene.sizeは、画面サイズに等しくないためです。コードのサイズデフォルトでは1024 * 768であるGameScene.sksをロードします

// GameViewController.swift 
if let scene = GameScene(fileNamed:"GameScene") {...} 

:私はあなたがこのようなあなたの最初のシーンを初期化するかもしれませんね。あなたがプログラムであなたのSKSpriteNodeを追加するので、しかし、あなたは、画面サイズに合わせて、このようにシーンを初期化することができます

// GameViewController.swift 
// Only remove if statement and modify 
let scene = GameScene(size: view.bounds.size) ... 

これは、あなたが持っている問題のほとんどを解決します。最後

override func update(currentTime: CFTimeInterval) { 
    let action = SKAction.moveTo(hero.position, duration: 0.25) 
    theCamera.runAction(action) 
} 

、開始時にあなたのヒーローとカメラを揃えるために、この行を追加します:また、私はSKActionを用いたカメラノードを移動示唆

self.camera?.position = hero.position 
+0

それは私が逃した部分でした。ありがとうございました!! – Bill

+0

@Billあなたが変更を行った場所でGameViewController.swiftコードを表示できますか?私はサイズでGameSceneを初期化する能力を持っていません。 – justColbs

関連する問題