Egyéni kurzor a 3. műveletsoron

Ez a megjegyzés az egyik legutóbbi hozzászólás folytatása. de most az egyedi kurzort az ActionScript 3.0 használatával hozza létre.

Az első lépés a normál kurzor elrejtése. Az AS 3.0 esetében ez így történik:

Ezután létre kell hoznia a kurzor üres részét. Általánosságban a kurzorok nem túl bonyolult formában vannak, ezért könnyen rajzolhatók szoftverrajz segítségével. A következő kód hozzáadja a flashcsip jelenetéhez egy munkadarabot a jövőbeli kurzorhoz nyíllal:

ActionScript 3.0 kód:

Mouse.hide (); var cur: Sprite = új Sprite (); cur.graphics.lineStyle (2,0x999999,1); cur.graphics.beginFill (0xcccccc); cur.graphics.moveTo (0,0); cur.graphics.lineTo (20,10); cur.graphics.lineTo (10,10); cur.graphics.lineTo (10,20); cur.graphics.endFill (); addChild (cur);

De a kurzor munkadarabja kézzel is létrehozható. Ehhez az Adobe Flash programban húzza meg maga a munkadarabot, válassza ki, majd nyomja meg az F8 billentyűkombinációt, hogy a rajzot videoklipre állítsa. Megjelenik egy ablak, amelyben megadjuk a jövőbeli filmcím nevét, válasszuk ki a "Movie clip" -t, és helyezzük el a regisztrációs pontot a bal felső sarokban. Ugyanabban az ablakban jelölje be az "Export for ActionScript" jelölőnégyzetet, és írja be az osztály nevét a beviteli mezőbe (ebben a példában ez a név "Cur" lesz). Ezután eltávolítjuk a munkadarabot a program asztaláról (de mentjük a projektünk könyvtárába), és a következő kódot írjuk a fő idővonalra:

Mouse.hide (); var cur: Cur = új Cur (); addChild (cur);

A kurzorok általában árnyékhatásúak. A DropShadowFilter szűrővel is hozzáadhatjuk kurzorunkhoz:

Mouse.hide (); var cur: Sprite = új Sprite (); cur.graphics.lineStyle (2,0x999999,1); cur.graphics.beginFill (0xcccccc); cur.graphics.moveTo (0,0); cur.graphics.lineTo (20,10); cur.graphics.lineTo (10,10); cur.graphics.lineTo (10,20); cur.graphics.endFill (); addChild (cur); var árnyék: DropShadowFilter = új DropShadowFilter (); shadow.distance = 5; shadow.color = 0x999999; shadow.alpha = 0,5; shadow.angle = 45; cur.filters = [árnyék];

Most pedig meg fogjuk győződni arról, hogy ha áthelyezi az igazi egérmutatót (amely emberi szemekből rejtve van, de még mindig létezik), akkor a házimunkált kurzorunk helyzete megváltozna:

Mouse.hide (); var cur: Sprite = új Sprite (); cur.graphics.lineStyle (2,0x999999,1); cur.graphics.beginFill (0xcccccc); cur.graphics.moveTo (0,0); cur.graphics.lineTo (20,10); cur.graphics.lineTo (10,10); cur.graphics.lineTo (10,20); cur.graphics.endFill (); addChild (cur); var árnyék: DropShadowFilter = új DropShadowFilter (); shadow.distance = 5; shadow.color = 0x999999; shadow.alpha = 0,5; shadow.angle = 45; cur.filters = [árnyék]; stage.addEventListener (MouseEvent.MOUSE_MOVE, mMove); mMove funkció (esemény: MouseEvent): érvénytelen

Elvben a kurzor készen áll és dolgozik. De legalább három hibája van, amelyeket el kell távolítani. Először is, alacsony fps-nál a kurzor "fékezi", vagyis görcsöket mozog, és nyilvánvalóan elmarad az egér valós kurzorától. Ezt a hibát a updateAfterEvent () módszerrel korrigáljuk. amely elvégzi a képernyő utáni esemény frissítését. Tehát az új kód:

Mouse.hide (); var cur: Sprite = új Sprite (); cur.graphics.lineStyle (2,0x999999,1); cur.graphics.beginFill (0xcccccc); cur.graphics.moveTo (0,0); cur.graphics.lineTo (20,10); cur.graphics.lineTo (10,10); cur.graphics.lineTo (10,20); cur.graphics.endFill (); addChild (cur); var árnyék: DropShadowFilter = új DropShadowFilter (); shadow.distance = 5; shadow.color = 0x999999; shadow.alpha = 0,5; shadow.angle = 45; cur.filters = [árnyék]; stage.addEventListener (MouseEvent.MOUSE_MOVE, mMove); mMove funkció (esemény: MouseEvent): érvénytelen

Másodszor, ha uvedom igazi egérkurzort azon túl, hogy a flash film, akkor is látni a házi kurzor, amely pimaszul kérkedik szélén a színpadon. Ez nem jó. Ezért az egér kurzor kilépési eseményt fogjuk elkapni a flash film jelenetén kívül, és az egyedi kurzort láthatatlanná tehetjük, ha elhagyja a jelenetet. Ehhez az AS 3.0-nak van egy különleges eseménye - a mouseLeave esemény. amelyet a Stage objektum küld minden egyes alkalommal, amikor az egér kurzor elhagyja a flash film munkaterületét. És amikor a kurzor visszatér a jelenethez, újra láthatóvá tesszük. Események, fordítsd meg az egérkijelző eseményt, ahogy megértettem, nincs ActionScript 3.0, de elég egyszerű szimulálni.

A harmadik fontos pont az, hogy a kurzort a flash film interaktív elemeivel való helyes működéséhez le kell tiltani a kurzorkövető egér eseményeket. Ezt úgy teheti meg, ha az egyedi kurzor mouseEnabled tulajdonságát false értékre állítja.

Legutóbb módosítjuk a kódot, és megkapjuk a következőket:

/ * elrejteni a normál egérkurzort * / Mouse.hide (); / * hozzon létre egyéni kurzort * / var cur: Sprite = új Sprite (); cur.graphics.lineStyle (2,0x999999,1); cur.graphics.beginFill (0xcccccc); cur.graphics.moveTo (0,0); cur.graphics.lineTo (20,10); cur.graphics.lineTo (10,10); cur.graphics.lineTo (10,20); cur.graphics.endFill (); addChild (cur); / * az eredeti egyedi kurzor láthatatlan * / cur.visible = false; / * megtiltja az egér események nyomon követését * / cur.mouseEnabled = false; / * árnyék hozzáadása a kurzorhoz * / var árnyék: DropShadowFilter = új DropShadowFilter (); shadow.distance = 5; shadow.color = 0x999999; shadow.alpha = 0,5; shadow.angle = 45; cur.filters = [árnyék]; / * A pálya események az egér mozgatásával a színpadon és a roll minden alkalommal, amikor változik a helyzet az egérmutató vannak rendelve az új koordinátákat az egérmutató sprite-kurzor * / stage.addEventListener (MouseEvent.MOUSE_MOVE, mMove); mMove funkció (esemény: MouseEvent): érvénytelen = 0 coordY> = 0 coordX

Ennek a kódnak az eredménye:

Ebben a példában minden programozottan történik. Ha a kurzort manuálisan húztuk (a fentiek szerint), akkor a kód így fog kinézni:

Mouse.hide (); var cur: Cur = új Cur (); addChild (cur); cur.visible = false; cur.mouseEnabled = hamis; var árnyék: DropShadowFilter = új DropShadowFilter (); shadow.distance = 5; shadow.color = 0x999999; shadow.alpha = 0,5; shadow.angle = 45; cur.filters = [árnyék]; stage.addEventListener (MouseEvent.MOUSE_MOVE, redrawCursor); function redrawCursor (esemény: MouseEvent): érvénytelen = 0 coordY> = 0 coordX