Ich arbeite jetzt schon eine Weile daran. Sie könnten es auch eine "umgekehrte Maske" oder eine "inverse Maske" nennen.Gibt es irgendwelche Gedanken darüber, wie man einen echten "Punch-out" -Bereich in einem Sprite erstellt?
Grundsätzlich erstellen ich ein Ansichtsfenster innerhalb eines Anzeigeobjekts. Ich muss zulassen, dass Objekte auf der Bühne, die sich unter dem Fenster befinden, mit der Maus interagieren können.
Dies ist vergleichbar mit einer WPF-Frage: Use WPF object to 'punch' hole in another?, die eine viel kürzere Writ-up hat.
Ich habe eine Klasse namens PunchOutShield
, die einen Sprite erstellt, der die Bühne (oder über einen gewünschten Bereich) abdeckt. Das Graphics-Objekt von Sprite wird mit der Farbe und Transparenz des Modal-Bildschirms von Flex gefüllt. Das Ergebnis ist ein Bildschirm, der aussieht wie der Bildschirm, der hinter einem modalen PopUp erscheint.
PunchOutShield
hat eine Methode namens punch
, die zwei Argumente akzeptiert - das erste ist ein Shape-Objekt, das die Form des Durchgriffsbereichs definiert; Das zweite ist ein Point-Objekt, das angibt, wo der Durchstoßbereich positioniert werden soll.
Es dauerte einige Experimente, aber ich fand, dass ich erfolgreich einen Punch-out-Bereich erstellen kann (d. H. - der modale Bildschirm wird nicht innerhalb der Grenzen der angegebenen Shape angezeigt). Um dies zu tun, setze ich cacheAsBitmap
auf dem Sprite, der zum Erstellen des modalen Bildschirms verwendet wird, auf True und auf das Shape-Objekt, das dem modalen Bildschirm Sprites displayList hinzugefügt wird.
Wenn ich den Mischmodus der Form auf ERASE einstelle, wird ein vollständig transparenter Bereich im modalen Bildschirm erstellt. So weit, großartig.
Das Problem ist, dass Shape
InteractiveObject nicht unterklassifiziert, so dass es keine Möglichkeit gibt, mouseEnabled = false
darauf festzulegen. Auf diese Weise wird die Interaktion zwischen der Maus und Objekten verhindert, die im Punch-Out-Bereich sichtbar sind.
Darüber hinaus ist InteractiveObject nicht verfügbar, um zu sehen, so kann ich nicht sehen, ob es eine Möglichkeit gibt, zu leihen, was es tut, um die mouseEnabled
Funktionalität bereitzustellen und es auf eine Unterklasse von Shape anwenden.
Ich habe versucht, ein anderes Sprite-Objekt, anstatt ein Shape-Objekt, aber die Mischung funktioniert nicht richtig. Ich bin mir nicht sicher, warum es einen Unterschied gibt, aber das Shape-Objekt scheint irgendwie mit dem Erziehungs-Sprite zu kombinieren, wodurch der ERASE-Blend-Modus das gewünschte Punch-Out-Erscheinungsbild erzielen kann.
Es wäre nicht das Ende der Welt, wenn ich den Bildschirm mit einer Reihe von Rechtecken aufstellen müsste, so dass der Punch-Out-Bereich einfach nicht gezeichnet wurde, aber dieser Ansatz wird nicht funktionieren, wenn der Schlag Die Fläche ist komplex. Oder rund.
Irgendwelche Gedanken zu diesem Ansatz oder zu einem alternativen Ansatz?
Eine Antwort auf diese hier zu finden: http://stackoverflow.com/questions/554631/flash-actionscript-draw-a-display-object-onto-another Sie nicht haben Zugriff auf ein Objekt als Bitmap, wenn Sie es als Bitmap zwischenspeichern, aber ich hatte nicht daran gedacht, ein Bitmap des PunchOutShields zu erstellen.Ich werde das versuchen, wenn ich etwas Zeit habe und die Ergebnisse veröffentlichen. –
Eine weitere mögliche Informationsquelle dazu: JSFL hat eine document.punch() -Methode, die genau das macht, wovon ich spreche (nimmt eine Form an und stampft durch andere Ebenen). Dies ist zumindest im Flash Player nachweisbar. –