2015-09-21 12 views
6

Non riesco a capirlo. Ho provato molte cose diverse e nessuna sembra funzionare. Con il mio codice attuale, la telecamera e l'eroe non si allineano mai e la scena sembra saltare molto lontano quando tocco lo schermo. Tutto quello che voglio fare è che quando tocco lo schermo, l'eroe si muove verso il punto di contatto e la telecamera lo segue. C'è un modo per bloccare la fotocamera allo spritenode dell'eroe?Ottieni SKCameraNode per seguire un eroe 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

intendi quando si tocca lo schermo , l'eroe si sposterà nella posizione in cui è stato toccato e la 'camera' seguirà/allineerà l'eroe'. Di conseguenza, l'eroe ora appare ancora al centro dello schermo? – WangYudong

+0

Sì, è esattamente ciò che intendo. – Bill

risposta

5

Il motivo per cui hai visto la scena saltato abbastanza lontano perché l'scene.size non è uguale alle dimensioni dello schermo. Credo che si potrebbe inizializzare la prima scena in questo modo:

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

Quel codice caricherà GameScene.sks cui dimensione è 1024 * 768 per impostazione predefinita. Ma dal momento che si aggiunge il SKSpriteNode di programmazione, è possibile inizializzare la scena in questo modo per adattarsi alle dimensioni dello schermo:

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

Questo risolverà la maggior parte del problema che avete. Inoltre, vi suggerisco di spostare il nodo fotocamera utilizzando SKAction:

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

L'ultima cosa, aggiungere questa riga per allineare la macchina fotografica con il tuo eroe alla partenza:

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

Questa era esattamente la parte che mi mancava. Grazie!! – Bill

+0

@Bill Puoi mostrare il tuo codice GameViewController.swift dove apporti le modifiche? Non ho la possibilità di inizializzare GameScene con una dimensione. – justColbs

Problemi correlati