2015-09-21 19 views
6

Bunu anlayamıyorum. Çok farklı şeyler denedim ve hiçbiri işe yaramadı. Şu anki kodumla, kamera ve kahraman asla hizalanmadı ve ekrana dokunduğumda sahne oldukça uzağa gidiyor gibi görünüyor. Tek yapmak istediğim ekrana dokunduğumda kahramanın dokunma noktasına gelmesi ve kameranın onu takip etmesi. Kamerayı kahraman spritenode kilitlemek için bir yolu var mı?Bir kahramanı takip etmek için SKCameraNode'u kullanın Spritenode

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

Şunu yapın:

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

son şey, başında kahramanını kamera hizalamak için bu satırı ekleyin: Üstelik ben SKAction kullanarak kamera düğümü hareketli öneririz , "kahraman" dokunduğunuz yere hareket edecek ve kamera "kahramanı" takip edecek/hizalayacaktır. Sonuç olarak, 'kahraman' hala ekranın ortasında görünüyor mu? – WangYudong

+0

Evet, tam olarak ne demek istediğimi. – Bill

cevap

5

olay yerinden gördüğümüz nedeni oldukça uzak atladı scene.size ekran boyutuna eşit değildir çünkü. Ben böyle ilk sahnesini başlatmak olabilir sanırım:

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

Bu kod olan boyutu varsayılan olarak 1024 * 768 olduğunu GameScene.sks yükleyecektir. programlı şekilde SKSpriteNode eklemek beri Ama, ekran boyutuna sığdırmak için bu şekilde sahneyi başlatabilir:

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

Bu, şu anlama sorunun en çözecektir. ekrana dokunduğunuzda

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

Tam olarak eksik olduğum kısım buydu. Teşekkür ederim!! – Bill

+0

@Bill Değişiklikleri yaptığınız yerde GameViewController.swift kodunu gösterebilir misiniz? GameScene'i bir boyutta başlatabilme yeteneğim yok. – justColbs