Använda infödda multitouch-gestures i ActionScript 3.0

I den här handledningen lär vi dig hur du implementerar inbyggda multitouch-gester som ska användas i dina program. Läs vidare!


Slutresultatförhandsvisning

Låt oss ta en titt på det slutliga resultatet vi ska arbeta för:

Obs! Det här exemplet fungerar bara på multitouch-enheter (tabletter, smartphones, pekskärmsdatorer och multitouch-pekplattor under AIR).

Obs för Android-användare: Multitouch kommer inte att köras i SWF-inbäddade på en HTML-sida i en Android-webbläsare, men källnedladdningen innehåller en APK som du kan använda för att kolla in den. (Observera att APK är bara för att visa en snabb demonstration av gesterna själva, och visas inte helt korrekt.)

Du kan nypa för att zooma, rotera för att rotera och svepa för att ändra bilden. Kolla in videodemo om du inte kan testa förhandsgranskningen på din enhet:


Steg 1: Kortfattad översikt

Vi använder det inbyggda Multitouch-stöd som är inbyggt i Flash Player för att skapa ett gestbaserat bildprogram.


Steg 2: Flash-dokumentinställningar

Starta Flash och skapa ett nytt dokument. Ställ scenstorleken till 600x300px och bildhastigheten till 24fps.


Steg 3: Gränssnitt

Gränssnittet blir väldigt enkelt, bara en bild i scenen som sedan modifieras av gesterna.


Steg 4: Få några bilder

Vi behöver några bilder för att testa vår ansökan, välja dem från din personliga samling eller ladda ner några för att testa.

Dessa är bilderna från demoen, som erhållits från Flickr, alla med en Creative Commons License.

Gräs 01 av 100kr

djup påverkan på planetfärgen av spettacolopuro

Yosemite: höstfärger av tibchris

Blomma av Antonio Manchado


Steg 5: Exportera till ActionScript

Konvertera en av bilderna till ett filmklipp och lägg till resten av bilderna till det klippet i olika ramar. Namn klippet SlideItem och markera Exportera till ActionScript låda.


Steg 6: TweenNano

Vi använder en annan tween-motor från standard som ingår i Flash, vilket ökar prestandan och blir enklare att använda.

Du kan ladda ner TweenNano från sin officiella hemsida.


Steg 7: Ny ActionScript-klass

Skapa en ny (Cmd + N) ActionScript 3.0-klass och spara den som Main.as i din klassmapp.


Steg 8: Klassstruktur

Skapa din grundläggande klassstruktur för att börja skriva din kod.

 paket import flash.display.Sprite; public class Main utökar Sprite public function Main (): void // constructor code

Steg 9: Obligatoriska klasser

Det här är de klasser som vi behöver importera för vår klass att arbeta, importera Direktivet gör externt definierade klasser och paket tillgängliga för din kod.

 importera flash.display.Sprite; importera flash.display.MovieClip; importera flash.ui.Multitouch; importera flash.ui.MultitouchInputMode; importera flash.events.TransformGestureEvent; importera com.greensock.TweenNano; importera com.greensock.easing.Strong;

Steg 10: Variabler

Det här är de variabler vi ska använda, läs kommentarerna i koden för att få veta mer om dem.

 privat var slideItem: SlideItem; // Föremålet som kommer att påverkas av gesten privat var tempContainer: Sprite; // En tom sprite som lagrar objektet

Steg 11: Konstruktör

Konstruktorn är en funktion som körs när ett objekt skapas från en klass, den här koden är den första som ska utföras när du gör en förekomst av ett objekt eller körs med hjälp av dokumentklassen.

Det utför de åtgärder som krävs för att starta programmet.

 allmän slutlig funktion Main (): void // Code

Steg 12: Aktivera ingångar på gester

Den här raden berättar om Flash Player för att identifiera multi-touch-läget för hantering av handenhet och rörelsehändelser.

 Multitouch.inputMode = MultitouchInputMode.GESTURE;

Läs mer om detta på help.adobe.com.


Steg 13: Slide Item

Låt oss instansera bilderna som svarar på gesthändelserna.

 slideItem = ny SlideItem (); / * Förhindrar att bilden ändras * / slideItem.stop (); / * Centrera bilden * / slideItem.x = stage.stageWidth * 0.5; slideItem.y = stage.stageHeight * 0,5; addChild (slideItem); lyssnare ("add", slideItem); // se nästa steg

Steg 14: Lägg till lyssnare

Den här funktionen lägger till eller tar bort gestaltaren beroende på den angivna parametern.

 privata slutliga funktion lyssnare (åtgärd: String, mål: Sprite): void if (action == 'add') target.addEventListener (TransformGestureEvent.GESTURE_ZOOM, onZoom); target.addEventListener (TransformGestureEvent.GESTURE_ROTATE, onRotate); target.addEventListener (TransformGestureEvent.GESTURE_PAN, onPan); target.addEventListener (TransformGestureEvent.GESTURE_SWIPE, onSwipe);  annat target.removeEventListener (TransformGestureEvent.GESTURE_ZOOM, onZoom); target.removeEventListener (TransformGestureEvent.GESTURE_ROTATE, onRotate); target.removeEventListener (TransformGestureEvent.GESTURE_PAN, onPan); target.removeEventListener (TransformGestureEvent.GESTURE_SWIPE, onSwipe); 

Detta innebär att lyssnare () funktion som kallas i föregående steg kommer att lägga till händelselysare till glidbilden, för att få lyssna på zooma, panorering, rotering och svepande gester.


Steg 15: Knippa till zoom

Denna funktion svarar mot den välkända nypa gest. Den hanterar bildzoom och zoomar ut.

 privat slutlig funktion onZoom (e: TransformGestureEvent): void / * Använd händelsedata för att skala målbilden * / e.target.scaleX * = e.scaleX; e.target.scaleY * = e.scaleY; 

Steg 16: Spinn för att rotera

Rotationen hanteras av denna funktion, två fingrar är vana vid snurra bilden i scenen.

 privat slutlig funktion onRotate (e: TransformGestureEvent): void / * Använd händelsedata för att rotera målbilden * / e.target.rotation + = e.rotation; 

Steg 17: Skjut till pan

Pan-funktionen används för att flytta bilden för att se delar som är utanför scenen.

 privat slutlig funktion onPan (e: TransformGestureEvent): void e.target.x + = e.offsetX; e.target.y + = e.offsetY; 

Steg 18: Swipe to Swap

Denna funktion är lite större på grund av de fyra snabba anvisningarna som finns tillgängliga. Gesten liknar den från föregående steg, men fastare, och istället för att helt enkelt flytta bilden runt byter den den till en annan bild.

Det kontrollerar först om ett föregående föremål ligger på scenen och lagrar det i en behållare för att kunna mellanliggande det och kunna ta bort det senare. Sedan offset egenskapen läses för att bestämma riktningen för svepningen, visar motsvarande animering och bild.

 privat slutlig funktion onSwipe (e: TransformGestureEvent): void / * Kontrollera om bilden är på scenen * / om (slideItem! = null) tempContainer = new Sprite (); tempContainer.addChild (slideItem); addChild (tempContainer);  / * Ändra bilder * / om (e.offsetX == 1) // right slideItem = new SlideItem (); slideItem.gotoAndStop (1); slideItem.x = -slideItem.width; slideItem.y = stage.stageHeight * 0,5; lyssnare ("add", slideItem); addChild (slideItem); TweenNano.to (tempContainer, 0.5, x: stage.stageWidth, onComplete: removeLast); TweenNano.to (slideItem, 0.5, x: stage.stageWidth * 0.5);  om (e.offsetX == -1) // left slideItem = new SlideItem (); slideItem.gotoAndStop (2); slideItem.x = stage.stageWidth + slideItem.width; slideItem.y = stage.stageHeight * 0,5; lyssnare ("add", slideItem); addChild (slideItem); TweenNano.to (tempContainer, 0.5, x: -slideItem.width, onComplete: removeLast); TweenNano.to (slideItem, 0.5, x: stage.stageWidth * 0.5);  om (e.offsetY == -1) // up slideItem = new SlideItem (); slideItem.gotoAndStop (3); slideItem.x = stage.stageWidth * 0,5; slideItem.y = stage.stageHeight + slideItem.height; lyssnare ("add", slideItem); addChild (slideItem); TweenNano.to (tempContainer, 0.5, y: -slideItem.height, onComplete: removeLast); TweenNano.to (slideItem, 0.5, y: stage.stageHeight * 0.5);  om (e.offsetY == 1) // ner slideItem = ny SlideItem (); slideItem.gotoAndStop (4); slideItem.x = stage.stageWidth * 0,5; slideItem.y = -slideItem.height; lyssnare ("add", slideItem); addChild (slideItem); TweenNano.to (tempContainer, 0.5, y: slideItem.height, onComplete: removeLast); TweenNano.to (slideItem, 0.5, y: stage.stageHeight * 0.5); 

Steg 19: Ta bort senaste bildelementet

När animationen är klar förstörs objektet offstage för att spara minne.

 privat slutlig funktion removeLast (): void listeners ('remove', tempContainer.getChildAt (0) som Sprite); removeChild (tempContainer); tempContainer = null; 

Steg 20: Ställ in huvudklass

Vi använder dokumentklassen i den här handledningen, om du inte vet hur du använder den eller är lite förvirrad, läs den här snabba tipsen.


Slutsats

Gester lägger till ett trevligt Rör och erbjuda bra interaktion i din ansökan, använd dem!

Tack för att du läste denna handledning, hoppas du att du har funnit det användbart!