Adobe - Flash - platform létrehozása és alkalmazása szűrők

A szűrők lehetővé teszik, hogy számos effektust alkalmazzon a raszteres objektumokhoz és objektumok megjelenítéséhez (árnyéktól a kúpéig és a homályosságig). Minden szűrő egy osztály. Ezért a szűrők használata magában foglalja a szűrőelemek példányainak létrehozását, ami megkülönböztethetetlen más objektumok létrehozásától. Miután létrehozta a szűrő objektum példányát, egyszerűen alkalmazhatja azt a megjelenítő objektumra az objektum szűrő tulajdonságával. BitmapData objektum esetében ezt az applyFilter () metódust használjuk.







Szűrő létrehozása

Szűrőobjektum létrehozásához egyszerűen hívja meg a kiválasztott szűrőosztály konstruktor módját. Például egy DropShadowFilter objektum létrehozásához használja a következő kódot:

Bár itt nem mutatjuk be, a DropShadowFilter () konstruktor (mint az összes szűrőosztály konstruktora) számos opcionális paramétert tartalmaz, amelyek segítségével a szűrőhatás megjelenését testreszabhatja.

A szűrő alkalmazása

A szűrőobjektum létrehozása után megjeleníthet objektumot vagy BitmapData objektumot. A szűrő alkalmazásának módja az objektumtól függ, amelyre vonatkozik.

Szűrő alkalmazása egy megjelenítő objektumra

Ha a szűrőhatásokat egy megjelenítő objektumra alkalmazzák, akkor ez a szűrők tulajdonságaival történik. A megjelenítési objektum szűrő tulajdonsága Array példány, amelynek elemei a megjelenített objektumra alkalmazott szűrőobjektumok. Ha egy szűrőt egy megjelenítő objektumra szeretne alkalmazni, hozzon létre egy példányt a szűrőből, adja hozzá az Array példányhoz, és rendelje hozzá ezt a Array objektumot a megjelenítő objektum szűrő tulajdonságához:

Ha több szűrőt szeretne hozzárendelni az objektumhoz, egyszerűen csak adja hozzá a szűrőket az Array példányhoz, mielőtt hozzárendeli a szűrők tulajdonságához. Az Array objektumhoz több objektumot is hozzáadhat, amelyeket a tervezőnek paraméterekként továbbít. Ez a kód például egy letörésszűrőt és egy izzószűrőt alkalmaz egy korábban létrehozott megjelenítési objektumra:

Ahhoz, hogy létrehozunk egy tömböt a szűrőt tartalmazó, a tervező használhat új Array () (amint azt az előző példákban), vagy használja szintaxis szó Array, forgalomba a szűrőket szögletes zárójelben ([]). Például a következő kódsor:

ugyanazt a műveletet hajtja végre, mint a kódsor

Ha több szűrőt alkalmaznak az objektumok megjelenítéséhez, azok egymás után lépnek életbe, és halmozott hatásuk van. Például, ha a tömb két szűrőelemek (szűrő letörés ami hozzá először, és az árnyék szűrő, amely növeli egy második), az árnyék szűrőt alkalmazni, mint a ferde szűrőt és a kijelző objektumot. Ennek az az oka, hogy az árnyékszűrő a második helyzetben van a szűrő tömbben. Ha a szűrőket halmozott hatás nélkül kívánja alkalmazni, akkor minden szűrőt alkalmaznia kell a megjelenítendő objektum új példányára.

Ha egy vagy több szűrőt csak egy megjelenítési objektumhoz rendeltek hozzá, létrehozhat egy példányt a szűrőből és rendelheti hozzá az objektumhoz egy utasításban. Például a következő kódsor egy elmosódott szűrőt alkalmaz a myDisplayObject nevű megjelenítési objektumra:

Az előző kód egy tömböt hoz létre például egy szó szintaxis Array (zárójelben), létrehoz BlurFilter például ahogy egy tömbben elem, és hozzárendeli, hogy Array a szűrőket tulajdonsága a kijelző objektum nevét myDisplayObject.

Szűrők törlése a kijelzőobjektumból

Az összes szűrő eltávolítása a kijelzőobjektumból olyan egyszerű, mint a nulla értékek hozzárendelése a szűrők tulajdonságához:

Ha egy objektumra több szűrőt alkalmaznak, és csak az egyik szűrőt kell eltávolítani, akkor egy sor műveletet kell végrehajtania a szűrők tulajdonságának tömbjének megváltoztatásához. További információ: A szűrőkkel való munkavégzés lehetséges problémái.

Szűrő alkalmazása BitmapData objektumra

Ha egy szűrőt alkalmaz egy BitmapData objektumra, az applyFilter () használatára van szükség a BitmapData objektumon:

Az applyFilter () metódus egy szűrőt alkalmaz az eredeti BitmapData objektumra, ami új szűrt képet eredményez. Ez a módszer nem változtatja meg az eredetit; Ehelyett a szűrő eredeti képre történő alkalmazásának eredményét a BitmapData példányban tárolja, amelyhez az applyFilter () metódust alkalmazzák.

A szűrők működése

A kijelzett objektumok szűrése úgy történik, hogy a forrásobjektum másolatát átlátható bittérképként tárolja.

Miután a szűrőt a megjelenítendő objektumra alkalmazta, a futásidejű eszköz elmenti az objektumot bitképként, mindaddig, amíg az objektumnak van érvényes szűrő-listája. Az eredeti bitképet minden későbbi szűrő effektusként forrásként használják.

Mindegyik megjelenítési objektumnak általában két raszterképet kell tartalmaznia: az egyik az eredeti szűretlen képernyőobjektummal, a másik a szűrés után kapott végleges képen. A végleges képet megjelenítésre használják. Ha a megjelenített objektum nem változik, a végleges kép nem frissül.

Lehetséges problémák a szűrők használatakor

Szűrőkkel történő munkavégzés során figyelembe kell venni számos lehetséges zavarforrást vagy problémát.

Szűrők és raszterképek elrejtése







Ha szűrőt szeretne alkalmazni egy megjelenítő objektumra, engedélyeznie kell az objektum bitképes gyorsítótárazását. Ha szűrőt alkalmaz a megjelenített objektumra, amelynek a cacheAsBitmap tulajdonság hamis. A cacheAsBitmap objektum tulajdonsága automatikusan igazra van állítva. Ha később törli az összes szűrőt a megjelenítő objektumból, a cacheAsBitmap tulajdonság lesz hozzárendelve az utolsó hozzárendelt értékhez.

A szűrők futásidőben történő módosítása

Ha már alkalmazta egy vagy több szűrőt a megjelenítendő objektumhoz, akkor a szűrőkészletet további szűrők hozzáadásával vagy szűrők törlésével nem módosíthatja. Ehelyett az alkalmazott szűrőkészlet hozzáadásához vagy módosításához módosítania kell egy külön tömböt, majd ezt a tömböt a szűrő objektum szűrő objektumához adja hozzá az objektumra alkalmazott szűrőkhöz. Ezt könnyebb elvégezni, ha elolvassa a szűrők tulajdonságainak tömbjét a Array változóba, és módosítja az ideiglenes tömböt. Ezt követően a tömb átkerül a kijelzett objektum szűrő tulajdonságához. Bonyolultabb esetekben előfordulhat, hogy külön szűrőt kell fenntartani. A változtatások megtörténnek, majd a változás után a fő tömb átkerül a kijelzett objektum szűrő tulajdonságához.

További szűrő hozzáadása

A következő kódban egy további szűrő hozzáadása egy olyan megjelenítő objektumhoz, amelyhez egy vagy több szűrőt már alkalmaznak. Először is egy izzítószűrőt alkalmaznak a myDisplayObject nevű megjelenítő objektumra; akkor a kijelölt objektum kattintásakor az addFilters () függvény hívásra kerül. Ebben a funkcióban két további szűrőt alkalmaznak a myDisplayObject-re:

Szűrő eltávolítása szűrőkészletből

Ha alkalmazzuk a kijelző tárgy és több szűrő törlése egy ilyen szűrőt, továbbra is használja a fennmaradó szűrőket a tárgy, a szűrőket másolva egy ideiglenes tömb, szükségtelen szűrőt el kell távolítani a tömb, majd kivégezték átminősítése ideiglenes tömb szűrők tulajdonsága a kijelző objektumot. Az "Eszközök elérése és tömbelemek törlése" szakaszban többféleképpen lehet eltávolítani egy vagy több elemet bármely tömbből.

A legközvetlenebb módszer az objektum legmagasabb szűrőjének eltávolítása (az utolsó objektumra alkalmazott szűrő). Az Array osztály pop () metódusát egy tömb szűrőjének eltávolítására használják:

Hasonlóképpen, a legalacsonyabb szűrő (az objektumra alkalmazott első szűrő) eltávolítása érdekében ugyanazt a kódot használjuk, a pop () metódus helyett az Array módszer shift () helyett.

Ha szűrőt szeretne eltávolítani a szűrőhalmaz közepétől (feltételezve, hogy a tömb több mint két szűrőt tartalmaz), akkor a splice () metódust kell használnia. Tudnia kell az eltávolítandó szűrő mutatóját (a tömb pozícióját). Például a következő kód eltávolítja a második szűrőt (szűrő az 1-es mutatóval) a kijelzőobjektumból:

Határozza meg a szűrő mutatóját

Szükséges tudni, hogy mely szűrőt kell eltávolítani a tömbből, hogy megtalálja a szűrő mutatóját. Szükséges vagy tanulni (az alkalmazás fejlesztési módjának tanulmányozásával) vagy a törölni kívánt szűrő mutatójának kiszámításához.

A legoptimálisabb megoldás a saját alkalmazás fejlesztése annak érdekében, hogy a törölt szűrő mindig a szűrőkészletben ugyanabban a helyzetben legyen. Például, ha van egy kijelző tárgyat egy szűrő alkalmazása konvolúciós szűrő és növényzet (ebben a sorrendben), és szeretné, hogy távolítsa el a vetett árnyék szűrő, miközben a konvolúciós szűrő, a szűrő egy ismert helyzetben (a legfelső szűrő). Ennek köszönhetően mindig tudhatod előre, hogy mely Array módszert kell használni (ebben az esetben az Array.pop () az árnyékszűrő eltávolításához).

Ha a szűrő el akarja távolítani, mindig tartozik egy bizonyos típusú, de nem szükségszerűen az ugyanabban a helyzetben a különböző szűrők, akkor ellenőrizze a adattípus minden szűrőt a tömbben, hogy meghatározza, hogy távolítsa el. Például a következő kód határozza meg, hogy a készlet mely szűrője egy izzószűrő, és eltávolítja ezt a szűrőt a készletből.

Egy bonyolultabb esetekben például, amikor a törölni kívánt szűrő a futási időben van kiválasztva, a legjobb megoldás az, hogy mentse a szűrő tömb egy állandó példányát, amely a fő szűrők listájaként szolgál. Minden alkalommal, amikor módosítja a szűrőkészletet, módosítsa a főlistát, majd használja ezt a szűrőcsoportot a kijelzőobjektum szűrők tulajdonságaként.

Például a következő kódpéldában egy sor konvolúciós szűrőt alkalmaznak a megjelenítő objektumra, hogy különböző vizuális effekteket hozzanak létre. Később az alkalmazásban az egyik ilyen szűrőt törli, míg a többiek maradnak. Ebben az esetben a kód tárolja a szűrőmező fő példányát, valamint a törölni kívánt szűrőhöz tartozó hivatkozást. Egy adott szűrő keresése és eltávolítása hasonló az előző megközelítéshez, kivéve, hogy a szűrőmátrix ideiglenes másolatának létrehozása helyett a főmemória feldolgozása megtörténik, majd a megjelenítő objektumra kerül.

Ebben a megközelítésben (amikor egy szűrő tömb elemeit összehasonlító mentett szűrő referenciával hasonlítjuk össze, hogy meghatározzuk, melyik szűrőt kell eltávolítani), el kell mentenie a szűrőmátrix különálló példányát. A kód nem működik, ha összehasonlít egy mentett szűrő referenciát a kijelölt objektum szűrő tulajdonságából átmásolt ideiglenes tömb elemeivel. Ez azért van, mert hozzárendel egy tömböt a szűrők tulajdonságához. A futásidejűleg minden egyes szűrőobjektum másolatot készít a tömbön belül. Ezek a példányok (szemben a forrás objektumokkal) a megjelenítő objektumra kerülnek alkalmazásra. És amikor elolvassa a szűrők tulajdonságát egy ideiglenes tömbre, akkor az ideiglenes tömb hivatkozásokat tartalmaz a másolt szűrőobjektumokra, nem pedig az eredeti szűrőobjektumokra való hivatkozásokra. Emiatt, ha az előző példában megpróbálta meghatározni a filterToRemove mutatót. Összehasonlítva a szűrőkkel egy ideiglenes filterkészletben, nem találtak találatot.

Szűrők és objektum transzformációk

A kijelölt objektum határoló téglalap alakú ablakán kívül eső szűrt területek (pl. Árnyék) egyik sem tekinthető a felület egy részének a pont felismerése céljából (az átfedés meghatározása vagy a példány más példányon való átkelés). Mivel a DisplayObject osztály pontjának felismerésére szolgáló módszerek vektorokon alapulnak, a felismerés nem végezhető el a rasztereredményhez képest. Ha például letörésszűrőt alkalmaz egy gombpéldányra, akkor a felismerés nem lesz elérhető a példány lekerekített részéhez.

A szűrők nem támogatják a skálázást, a forgatást és a eltolódást; ha maga a szűrt objektum skálázott (ha a scaleX és a scaleY nem 100%), akkor a szűrőhatást nem skálázza a példány. Ez azt jelenti, hogy a példány eredeti alakja elfordul, skálázódik vagy mozog, de a szűrő nem forog, nem skálázik, és nem mozog a példával.

Egy példány animálható egy szűrővel, hogy reális hatásokat vagy beágyazott példányokat hozzon létre, és használja a BitmapData osztályt a szűrők animálásához ennek érdekében.

Szűrők és Bitmap objektumok

Ha a BitmapData objektumra bármilyen szűrőt alkalmaznak, akkor a cacheAsBitmap tulajdonság automatikusan true értékre van állítva. Így a szűrőt ténylegesen az objektum egy példányára, nem pedig az eredetire alkalmazzák.

Ezt a másolatot a fõképernyõre (a forrás objektum felett) a legközelebbi képponthoz lehetõ legközelebb helyezik el. Ha az eredeti raszterobjektum határai megváltoznak, akkor a szűrt másolat raszterképe újra az eredeti, nem feszített és torzított alapon fog megjelenni.

Ha a kijelzési objektum összes szűrőjét törli, akkor a cacheAsBitmap tulajdonság a szűrő alkalmazása előtt a hozzá rendelt értéket veszi fel.




Kapcsolódó cikkek