In SpriteKit hat SKCropNode keine Auswirkung auf einen SKShapeNode

8

Ich habe versucht, eine Maske auf einen SKShapeNode mit SKCropNode anzuwenden, und bisher ohne Erfolg. Zu denken, dass es ein SpriteKit-Bug ist - Hier ist das Code-Snippet:

%Vor%

Hat jemand eine Umgehungsmöglichkeit für dieses Problem? Danke vielmals!

    
pwang 16.02.2014, 20:25
quelle

3 Antworten

8

Das hat mich den größten Teil des Tages gestört. Ich hatte geplant, einen Timer ähnlich dem ausgezeichneten TCProgressTimer von Tony Chamblee zu erstellen . Da meine Anwendung jedoch mehrere Fortschritts-Timer verwendet, wollte ich nicht Dutzende unterschiedlich großer Sprites für unterschiedliche Auflösungen erstellen müssen.

Meine Lösung bestand darin, SKShapeNode Objekte in SKSpriteNode Objekte zu konvertieren. Ich musste letztendlich zu den Grundlagen zurückkehren und Core Graphics verwenden, um das Heavy Lifting durchzuführen. Dies ist zwar eine recht unordentliche Methode, aber ich wollte schnelle Ergebnisse, um Objekte dynamisch zu erstellen, die den Ergebnissen ähneln, die bei der Verwendung von SKShapeNode erzielt wurden.

Ich bin nur daran interessiert, zur Zeit Kreisobjekte zu machen, also habe ich es so gemacht:

%Vor%

Das resultierende Sprite kann jetzt wie erwartet von SKCropNode maskiert werden. Da diese Sprites alle generiert werden, bevor die Szene beginnt, bemerke ich keinen Leistungseinbruch. Allerdings würde ich mir vorstellen, dass diese Methode sehr ineffizient ist, wenn Sie mehrere Knoten im laufenden Betrieb generieren.

Ich würde gerne Lösungen von anderen Benutzern hören. Hoffe das hilft.

-DC

    
DoctorClod 16.02.2014 21:31
quelle
4

Ich habe die ähnliche Aufgabe in meiner App. Ich muss mehrere unregelmäßige Formen basierend auf Benutzereingaben zeichnen und sie dann als Masken der Schnittknoten verwenden.

Die Lösung, die für mich funktioniert, ist:

  1. Erstellen Sie einen SKShapeNode mit dem erforderlichen Pfad

  2. ruft mit der SKView-Methode textureFromNode:crop:

  3. ein SKTexture daraus ab
  4. erstellt einen SKSpriteNode aus dieser Textur.

  5. Verwenden Sie den SKSprite-Knoten als Maske.

Dmitry Klochkov 24.02.2015 08:33
quelle
2

Ihr Titel ist korrekt. Ich habe auch herausgefunden, dass ein ShapeNode in der CropNode-Hierarchie auch die darüber liegenden Kinder beeinflusst. Ich habe ein schnelles Experiment erstellt. Sie können ein neues Spielprojekt erstellen und es selbst ausprobieren. Wenn Sie eine der addChild: shapeContent-Zeilen auskommentieren, können Sie sehen, wie sich dies auf das Zuschneiden des Raumschiffbilds auswirkt.

Wie DoctorClod darauf hinweist, scheint die aktuelle Lösung dafür zu sorgen, dass alle Kinder des cropNode SpriteNodes sind.

%Vor%     
Scott 25.10.2014 00:46
quelle

Tags und Links