2016-03-26 44 views
5

Volevo solo fare qualcosa che a me sembra davvero semplice, che è fare un emettitore nell'intero sfondo di una vista ... quindi vorrei che la vista fosse in grado di ingrandire e ridimensionare e così via, permettendo all'emettitore per apparire corretto qualunque cosa abbia fatto ...Come ridimensionare un SKEmitterNode?

Non sto cercando di ridimensionare l'emettitore. Voglio che gli oggetti rimangano della giusta dimensione, ma voglio che cambi l'area dell'emettitore ... pensalo come l'opzione "dimensione tela" (senza ridimensionare) in Photoshop ..

Vorrei usare questo effetto , per esempio, per aggiungere neve o pioggia a un'intera scena, o fare un globo di neve sprite ...

Il fatto è che, forse, non sto solo cercando nel posto giusto, ma sembra che le proprietà di qualsiasi dimensione su un SKEmitterNode è di sola lettura ... cosa sto facendo male?

Ecco un codice, in cui l'emettitore risultante è solo un piccolo rettangolo nel mezzo della vista.

override func viewDidLoad() { 
    super.viewDidLoad() 

    if let scene = GameScene(fileNamed:"GameScene") { 
     // Configure the view. 
     let skView = self.view as! SKView 
     skView.showsFPS = true 
     skView.showsNodeCount = true 
     if let emitter = SKEmitterNode(fileNamed: "Bokeh") { 
      emitter.position = view.center 
      scene.addChild(emitter) 
     } 
     /* Sprite Kit applies additional optimizations to improve rendering performance */ 
     skView.ignoresSiblingOrder = true 

     /* Set the scale mode to scale to fit the window */ 
     scene.scaleMode = .AspectFill 
     skView.presentScene(scene) 
    } 
} 

Ho bisogno di chiarire un po 'di più. Per la neve, vorrei che le particelle istanziassero prima che entrassero nella scena, e poi cadono attraverso la scena, e muoiono solo dopo che hanno lasciato la scena, piuttosto che apparire casualmente in tutta la scena, e poi continuare a cadere giù ... Vorrei che la neve riprendesse i limiti della scena.

risposta

6

Quello che state cercando è chiamato particlePositionRange:

La gamma di valori casuali consentiti per la posizione di una particella.

È possibile modificare in questo modo:

emitterNode.particlePositionRange = CGVector(dx: dx, dy: dy) 

dx dovrebbe essere la larghezza del emettitore e dy l'altezza. Quindi potrebbe essere la dimensione di una scena (nota che per impostazione predefinita la dimensione della scena è 1024x768 se non specificata diversamente).

Stessa cosa si può fare utilizzando l'editor Particle modificando i valori nella sezione Posizione Gamma:

position range

+0

così ho posizionare l'emettitore al centro della vista, e impostare l'intervallo di essere la larghezza e altezza? Non sembra così male. :-) –

+0

che ha funzionato totalmente ed è un tale sollievo sapere e capire :-) grazie mille! –

+0

un'altra domanda ... per la neve, come faccio a far apparire inizialmente le particelle SOPRA la vista, e non casualmente in tutta la vista? –