2013-09-30 14 views
9

Qual è il modo corretto di "ridurre" la scena.SpriteKit - Set Scale and Physics

Ho un oggetto che applico un impulso per accenderlo sullo schermo. Ad esempio, sparerà all'incirca di 100 px., Funziona come previsto - aumenta la forza che fa volare di più, aumenta la densità vola meno etc.

Il problema che ho è lo zoom, l'unico modo che conosco per ridurre su una scena è impostato su Scala e il restringimento di tutti i miei nodi come previsto.

Ma invece l'oggetto che vola lo stesso numero (appena ingrandito) vola più del doppio della distanza.

Quando registro la massa/densità ecc dell'oggetto prima e dopo la scala I sono uguali, come previsto.

Quindi perché non vola lo stesso importo? Ho provato a cambiare l'impulso per far combaciare la scala, ma non funziona, sì, vola meno distanza - ma non è uno per uno con il ridimensionamento.

domanda difficile ...

Grazie per le idee.

risposta

10

La soluzione semplice (grazie a Chris LaPollo, un autore su RW)

[self runAction:[SKAction scaleTo:0.5 duration:0]]; 

Nient'altro necessari.

La cosa strana è che non puoi fare

[self setScale:0.5]; 

Come si ottiene questo avvertimento, ed è doenst lavoro - ma l'esecuzione di un'azione fa - strano !!!

SKScene: l'impostazione della scala di una SKScene non ha alcun effetto.

+2

Non è possibile eseguire [self setScale: 0.5]; perché non dovresti scalare la scena. Vedi la mia risposta qui sotto. – JKallio

+2

Non ce la faccio più: "SKScene: animare la scala di una SKScene non ha alcun effetto". – edo42

10

Credo che non dovresti scalare il SKScene (come ti suggerisce se provi il metodo setScale con SKScene). Prova invece il ridimensionando.

myScene.scaleMode = SKSceneScaleModeAspectFill; 

E poi durante la zoomata:

myScene.size = CGSizeMake(myScene.size.width + dx, myScene.size.height + dy); 

* Apple documentation dice:

Impostare la proprietà scaleMode a SKSceneScaleModeResizeFill. Sprite Kit ridimensiona automaticamente la scena in modo che corrisponda sempre alle dimensioni della vista.

1

Per quelli come me che sono finiti qui dopo una ricerca, cambiare la scala della scena per rimpicciolire non funziona più. Invece, incapsulare tutti i nodi in uno SKNode vuoto ed eseguire azioni su questo:

self.rootNode = [SKNode node]; 
// Add your children nodes here to the rootnode. 
[self addChild:self.rootNode]; 
// Zoom out 
[self.rootNode runAction:[SKAction scaleBy:2 duration:5]]; 
// Zoom in 
[self.rootNode runAction:[SKAction scaleBy:.5 duration:5]]; 

sé è lo SKScene. Spero che questo aiuti.