2015-06-25 4 views
7

Ich habe ein Spiel mit SpriteKit entwickelt, das sich stark auf 1 SKShapeNode (welches eine Linie ist) stützt. Ich mache die Zeile wie folgt aus:Alternativen zu 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) 
    } 

Leider, da dies als eine Debug-Funktion (Sprite-Kit Zeichnung) entwickelt wurde, ist es nicht optimiert für das, was ich tue, und ein größeres Problem ist die Linie hat Artefakte (Da die Linienbreite größer als 2 ist). Diejenigen, sehen wie folgt aus: http://i.stack.imgur.com/ccQ1s.png

Vor diesem Hintergrund habe ich abgezogen, dass die Verwendung Sprite-Kits SKShapeNode ist keine Option für mich, es sei denn, jemand weiß, wie die genannten Probleme zu beheben. Ich habe in cocos2d nachgesehen, aber es scheint, als ob das ein bisschen übertrieben ist (die gesamte lib für nur einen CCDrawNode verwenden). Gibt es Open Source/Public Erweiterungen für SKShapeNode (und Swift), die die Zeichnungsfunktion verbessern? Das Wichtigste, was behoben werden muss, sind die Artefakte (weiße Punkte/Linien im Knoten). Wenn es nichts öffentliches gibt, ist Cocos2d meine beste Wahl?

+1

Anstatt eine Linie zu verwenden, können Sie ein tatsächlich eingeschlossenes Polygon erstellen? Könnte bedeuten, dass Ihre createPathToMove() - Funktion ein bisschen haariger ist, aber Sie können dann fillColor anstelle von strokeColor verwenden und diese Artefakte nicht haben –

Antwort

4

Obwohl dieser Beitrag ein wenig alt ist, dachte ich, ich könnte es auch selbst beantworten, wenn jemand anderes das gleiche Problem hat.

Um die Artefakte in der Linie zu entfernen, möchten Sie die Linienbreite grundsätzlich auf eine Größe kleiner als 2.0 einstellen (aus irgendeinem Grund treten keine Artefakte auf, wenn sie kleiner ist). Nachdem die Linienbreite einstellen, sollten Sie die SKNode wie so skalieren:

node.xScale = 10 
node.yScale = 10 

Dies wird dann die Linie deutlich dicker erscheinen als es ist, und es gibt keine Artefakte in der Zeile.

Sie müssen möglicherweise auch die Antialias-Eigenschaft auf false setzen, da sonst die Zeile sehr unscharf erscheint.

+0

Ich werde das versuchen, danke! –