theFlashWizard
%Europe/Berlin %860 %2007, 20:38
Inleiding
Hey Mensen,
Ik wil een MaskedSprite clas maken.
Deze class moet zijn kinderen verbergen met een masker. Zie het als shortcut ten opzichte van een normale sprite maken, een shape maken, uittekenen, toevoegen aan displaylist en als masker gebruiken.
De class zou bijv. properties kunnen krijgen als:
maskWidth, maskHeight, maskEllipse, maskX, maskY.
Waarom ben ik überhaupt bezig met een mask ipv. een scrollRect? Omdat ik met afgeronde hoeken wil kunnen werken.
Groot nadeel van een masker is dat hij op de displaylist komt. Als iemand dat niet verwacht, een child toe voegt en probeert die op te halen met getChildAt(0) dan krijgt hij vervolgenss het masker terug. Wat dan natuurlijk niet gewenst is.
Eigenlijk wil ik ook background en border toevoegen. (Als ik dit via graphics doe krijg je nooit de border op children.). Dit betekend nog meer displayobjecten die ik eigenlijk wil controleren en verbergen.
Nu zou je veel DisplayObjectContainer properties en methods kunnen overschrijven om ervoor te zorgen dat men hier niks van merkt. Ik kan echter ook een content Sprite toevoegen om alle displayObjecten die gemaskeerd moeten worden toevoegen. (Ook erg handig als je er later een scroll functie aan wilt bouwen.)
Opties
Ik heb hierbij alleen een grote afweging.
Optie1 Content propertie toevoegen.
Je geeft een MaskedSprite class een public content property om displayObjecten (die gemaskeerd moeten worden) aan toe te kunnen voegen. Hiernaast kan je dan ook eventueel objecten aan de MaskedSprite zelf toe voegen. Hierbij zou je dan een aantal methods moeten overriden (methods als swapChild, removeChild()) om te voorkomen dat mensen aan de mask child komen.
optie2 Override.
Je override bijna alles van de Sprite class en je doet alsof je kinderen kan toevoegen aan de MaskedSprite instance. Op de achtergrond sluis je alles door naar een content child.
Je zou ook nog methods kunnen maken als:
addStyleChild(), removeStyleChild() enz.
Vergelijking
Optie1 content property toevoegen ten opzichte van optie2 Override.
Voordelen
Makkelijker
Iets minder kinderen te overschrijven.
Nadelen
Je dwingt de gebruiker een ongewone stap te doen, een content property te gebruiken.
Je linkt direct door naar een dieper object. Het is beter om doorsluis functies te maken. Dan kan je eventuele veranderingen nog opvangen onder dezelfde interface.
is niet zomaar te verwisselen met een Sprite.
Mijn mening
Ik zou voor optie2 de override gaan. Dit omdat:
Ik het heel erg belangrijk vind dat een interface consistent is met bijv. de gewone actionscript classes.
Ik containers graag makkelijk wil kunnen omwisselen.
Mijn collega's mening
Mij collega gaat voor optie 1 content property toevoegen omdat:
Minder overrides (want overrides zijn slecht)
Je legt de gebruiker minder op.
Jou mening?
Voor welke optie zou jij gaan en waarom?
Optie 3?
Als jullie nog een optie 3 weten hoor ik die natuurlijk ook heel graag.
Alvast bedankt voor jullie bijdrage.
Hey Mensen,
Ik wil een MaskedSprite clas maken.
Deze class moet zijn kinderen verbergen met een masker. Zie het als shortcut ten opzichte van een normale sprite maken, een shape maken, uittekenen, toevoegen aan displaylist en als masker gebruiken.
De class zou bijv. properties kunnen krijgen als:
maskWidth, maskHeight, maskEllipse, maskX, maskY.
Waarom ben ik überhaupt bezig met een mask ipv. een scrollRect? Omdat ik met afgeronde hoeken wil kunnen werken.
Groot nadeel van een masker is dat hij op de displaylist komt. Als iemand dat niet verwacht, een child toe voegt en probeert die op te halen met getChildAt(0) dan krijgt hij vervolgenss het masker terug. Wat dan natuurlijk niet gewenst is.
Eigenlijk wil ik ook background en border toevoegen. (Als ik dit via graphics doe krijg je nooit de border op children.). Dit betekend nog meer displayobjecten die ik eigenlijk wil controleren en verbergen.
Nu zou je veel DisplayObjectContainer properties en methods kunnen overschrijven om ervoor te zorgen dat men hier niks van merkt. Ik kan echter ook een content Sprite toevoegen om alle displayObjecten die gemaskeerd moeten worden toevoegen. (Ook erg handig als je er later een scroll functie aan wilt bouwen.)
Opties
Ik heb hierbij alleen een grote afweging.
Optie1 Content propertie toevoegen.
Je geeft een MaskedSprite class een public content property om displayObjecten (die gemaskeerd moeten worden) aan toe te kunnen voegen. Hiernaast kan je dan ook eventueel objecten aan de MaskedSprite zelf toe voegen. Hierbij zou je dan een aantal methods moeten overriden (methods als swapChild, removeChild()) om te voorkomen dat mensen aan de mask child komen.
optie2 Override.
Je override bijna alles van de Sprite class en je doet alsof je kinderen kan toevoegen aan de MaskedSprite instance. Op de achtergrond sluis je alles door naar een content child.
Je zou ook nog methods kunnen maken als:
addStyleChild(), removeStyleChild() enz.
Vergelijking
Optie1 content property toevoegen ten opzichte van optie2 Override.
Voordelen
Makkelijker
Iets minder kinderen te overschrijven.
Nadelen
Je dwingt de gebruiker een ongewone stap te doen, een content property te gebruiken.
Je linkt direct door naar een dieper object. Het is beter om doorsluis functies te maken. Dan kan je eventuele veranderingen nog opvangen onder dezelfde interface.
is niet zomaar te verwisselen met een Sprite.
Mijn mening
Ik zou voor optie2 de override gaan. Dit omdat:
Ik het heel erg belangrijk vind dat een interface consistent is met bijv. de gewone actionscript classes.
Ik containers graag makkelijk wil kunnen omwisselen.
Mijn collega's mening
Mij collega gaat voor optie 1 content property toevoegen omdat:
Minder overrides (want overrides zijn slecht)
Je legt de gebruiker minder op.
Jou mening?
Voor welke optie zou jij gaan en waarom?
Optie 3?
Als jullie nog een optie 3 weten hoor ik die natuurlijk ook heel graag.
Alvast bedankt voor jullie bijdrage.