2015-06-25 17 views
7

Ho un gioco progettato con SpriteKit che si basa molto su 1 SKShapeNode (che è una linea). Sto facendo la linea come questa:Alternative a SKShapeNode

 if let path = createPathToMove() { 
     let shapeNode = SKShapeNode() 
     shapeNode.path = path 
     shapeNode.name = "line" 
     shapeNode.strokeColor = UIColor.blackColor() 
     shapeNode.lineWidth = 20 
     shapeNode.zPosition = 5 
     shapeNode.antialiased = false 
     shapeNode.lineCap = kCGLineCapRound 
     self.world!.addChild(shapeNode) 
    } 

Purtroppo, dal momento che questo è stato progettato come una caratteristica di debug (disegno Sprite-kit), che non è ottimizzato per quello che sto facendo, e un problema più grande è il la linea ha artefatti (dato che la larghezza della linea è maggiore di 2). Coloro che hanno questo aspetto: http://i.stack.imgur.com/ccQ1s.png

Con questo in mente, ho dedotto che sta usando Sprite-kit SKShapeNode non è un'opzione per me, a meno che qualcuno sa come risolvere i problemi menzionati. Ho esaminato cocos2d, tuttavia sembra che sia un po 'eccessivo (usando l'intera lib solo per un CCDrawNode). Esistono estensioni open source/pubbliche per SKShapeNode (e swift), che migliorano la funzione di disegno? La cosa più importante da correggere sono gli artefatti (punti/linee bianchi nel nodo). Se non c'è nulla di pubblico, Cocos2d è la mia scelta migliore?

+1

Invece di utilizzare una linea, è possibile renderla un poligono reale racchiuso? Potrebbe significare che la tua funzione createPathToMove() è un po 'più pelosa, ma puoi usare fillColor invece di strokeColor e non avere quegli artefatti –

risposta

4

Anche se questo post è un po 'vecchio, ho pensato che avrei potuto rispondere anch'io nel caso in cui qualcun altro avesse lo stesso problema.

In sostanza, per rimuovere gli elementi nella riga, si desidera impostare la larghezza della linea su una dimensione inferiore a 2,0 (per qualsiasi motivo non si verificano artefatti quando è inferiore a questo). Dopo aver impostato la larghezza della linea, si vuole scalare lo SKNode in questo modo:

node.xScale = 10 
node.yScale = 10 

Questo sarà quindi rendere la linea appare significativamente più spesso di quello che è, e non c'è artefatti nella linea.

Potrebbe anche essere necessario impostare la proprietà antialiased su falso, altrimenti la linea apparirà molto sfocata.

+0

Ci proverò, grazie! –