Ist es möglich, einen Kreis (SKShapeNode) als eine Maske in Sprite Kit?
Ich versuche, erstellen Sie eine kreisförmige Maske in einem Sprite-Kit-Projekt. Ich erstellen Sie den Kreis, wie hier (Positionierung in der Mitte des Bildschirms):
SKCropNode *cropNode = [[SKCropNode alloc] init];
SKShapeNode *circleMask = [[SKShapeNode alloc ]init];
CGMutablePathRef circle = CGPathCreateMutable();
CGPathAddArc(circle, NULL, CGRectGetMidX(self.frame), CGRectGetMidY(self.frame), 50, 0, M_PI*2, YES);
circleMask.path = circle;
circleMask.lineWidth = 0;
circleMask.fillColor = [SKColor blueColor];
circleMask.name=@"circleMask";
und weiter unten der code, ich habe es als Maske für die cropNode
:
[cropNode setMaskNode:circleMask];
... aber anstatt den Inhalt zeigt in einem Kreis, die Maske erscheint als ein Quadrat.
Ist es möglich, eine SKShapeNode
wie eine Maske, oder brauche ich, um ein Bild zu verwenden?
InformationsquelleAutor MassivePenguin | 2013-11-26
Du musst angemeldet sein, um einen Kommentar abzugeben.
Nach viel fluchen, durchforstet das Internet, und die Experimentieren in Xcode habe ich ein wirklich hacky fix.
Beachten Sie, dass dies eine wirklich böse hack - aber man kann die Schuld, die auf Sprite-Kit die Durchführung von
SKShapeNode
. Hinzufügen einer Füllung zu einem Pfad, führt zu folgenden:SKSpriteNode
Geschwisterknoten unmaskable (z.B.SKLabelNode
s)Nicht ein Idealzustand.
Inspiriert von Tony Chamblee Fortschritt timer, das "reparieren" ist zu verzichten, mit der Füllung zusammen, und nutzen Sie einfach die Kontur des Pfades:
So kommentiert, müssen Sie den radius um die Hälfte, was Sie normalerweise haben, und die Linie Breite die doppelte radius.
Hoffentlich wird Apple schauen, dieses in der Zukunft; denn jetzt, dieser hack ist die beste Lösung, die ich gefunden habe (außer mit einem Bild, die nicht wirklich funktionieren, wenn Sie Ihre Maske dynamisch sein muss).
InformationsquelleAutor MassivePenguin
Ja, es ist unmöglich zu füllen-farbigen shapenode in der aktuellen Sprite-Kit Realisierung. Es ist ein bug, denke ich.
Aber!
Kann man immer machen die Form, textur und verwenden Sie es als Maske!
Ex, lassen edge ist SKShapeNode erstellt vor.
Ersten, machen es zu textur vor hinzufügen, um anzuzeigen (in diesem Fall es wird sauber von einem anderen Knoten)
Zweite,
InformationsquelleAutor djdance
Da ich nicht mit einem SKShapeNode als Maske habe ich beschlossen, es zu konvertieren, um eine SKSpriteNode.
Hier ist es meine Swift-code:
- Und es funktioniert 🙂
UIImage
aus einerCGPath
oder eineUIBezierPath
. Sie können dann erstellen Sie eine textur aus dem Bild.Hi 0x141E, ich bin eigentlich nicht hinzufügen Form (die SKShapeNode), um die Szene. Der einzige Knoten, die gespeichert werden, wird sprite.
Dies ist eine viel bessere Lösung als die akzeptierte eine
InformationsquelleAutor Luca Angeletti
Es ist eine etwas peinliche Lösung für dieses Problem, wie ich glaube, etwas weniger böse als die zur Sprache gebrachte hacks um dieses Problem. Einfach wickeln Sie Ihre SKShapeNode in einem SKNode. Habe ich noch nicht getestet, welche Art von Leistung trifft dies verursachen könnten, aber angesichts der Tatsache, dass SKNode nicht zeichnen, ich hoffe es wird nicht allzu bedeutend.
d.h.
InformationsquelleAutor Ash
Einstellung alpha-Maske Knoten .0 funktioniert der trick:
BEARBEITEN:
Scheint zu funktionieren nur für Mac OS.
InformationsquelleAutor Art