Använda SkapaJ PreloadJS, SoundJS och TweenJS

I den första delen av serien om användning av CreateJs, tittade vi på EaselJs. I denna andra och sista delen kommer vi att titta på PreloadJs, SoundJs och TweenJs.

PreloadJS

PreloadJS är ett bibliotek som låter dig hantera och samordna laddning av tillgångar. PreloadJS gör det enkelt att förinställa dina tillgångar, som bilder, ljud, JS, data och andra. Den använder XHR2 för att ge reell framstegsinformation när den är tillgänglig eller faller tillbaka till etikettladdning och lättad framsteg när det inte är det. Det tillåter flera köer, flera anslutningar, pausa köer och mycket mer.

I PreloadJS är LoadQueue-klassen det huvudsakliga API-läget för preloading-innehåll. LoadQueue är en lasthanterare, som kan förinställa antingen en enda fil eller en kö av filer. var kö = nytt createjs.LoadQueue (true);, passerar falskt skulle tvinga taggning när det är möjligt. LoadQueue har flera händelser du kan prenumerera på:

  • slutfört: avfyrade när en kö slutar laddar alla filer
  • fel: avbruten när köen möter ett fel med någon fil.
  • framsteg: framstegen för när hela köen har ändrats.
  • fileload: för när en enda fil har slutfört laddning.
  • filprorogress: framstegen för när en enda fil har ändrats. Snälla du notera att endast filer som laddas med XHR (eller möjligen av plugins) kommer att avfyra framstegshändelser, annat än noll eller 100%.

Du kan ladda enskilda filer genom att ringa loadfile ("sökväg till fil") eller ladda flera filer genom att ringa loadManifest () och passerar i en rad filer som du vill ladda.

De filtyper som stöds av LoadQueue inkluderar följande.

  • BINARY: Rå binär data via XHR
  • CSS: CSS-filer
  • BILD: Vanliga bildformat
  • JAVASCRIPT: JavaScript-filer
  • JSON: JSON data
  • JSONP: JSON-filer tvärdomän
  • MANIFEST: En lista över filer som ska laddas i JSON-format, se loadManifest
  • LJUD: Ljudfilformat
  • SVG: SVG-filer
  • TEXT: Textfiler - Endast XHR
  • XML: XML-data

Här är ett exempel på att använda PreloadJS för att ladda in en JavaScript-fil, några PNG-filer och en MP3.

var kanvas = document.getElementById ("Canvas"); varstadiet = nya createjs.Stage (kanfas); var manifest; var preload; var progressText = new createjs.Text ("", "20px Arial", "# 000000"); progressText.x = 300 - progressText.getMeasuredWidth () / 2; progressText.y = 20; stage.addChild (progressText); stage.update (); funktion setupManifest () manifest = [src: "collision.js", id: "myjsfile", src: "logo.png", id: "logo", src: "ForkedDeer.mp3" : "mp3file"]; för (var i = 1; i<=13;i++) manifest.push(src:"c"+i+".png")  function startPreload()  preload = new createjs.LoadQueue(true); preload.installPlugin(createjs.Sound); preload.on("fileload", handleFileLoad); preload.on("progress", handleFileProgress); preload.on("complete", loadComplete); preload.on("error", loadError); preload.loadManifest(manifest);  function handleFileLoad(event)  console.log("A file has loaded of type: " + event.item.type); if(event.item.id == "logo") console.log("Logo is loaded"); //create bitmap here   function loadError(evt)  console.log("Error!",evt.text);  function handleFileProgress(event)  progressText.text = (preload.progress*100|0) + " % Loaded"; stage.update();  function loadComplete(event)  console.log("Finished Loading Assets");  setupManifest(); startPreload();

Inom setupManifest () funktion vi lägger till en JavaScript-fil, en MP3-fil och en PNG-fil. Vi skickar ett objekt med "src" och "id" -tangenterna. Genom att använda "id" kommer vi att kunna identifiera tillgången när den har laddats. Slutligen går vi igenom och lägger till 13 fler bilder i matrisen. Du behöver inte alltid ett "id" om du bara vill se till att vissa tillgångar laddas.

Vi lyssnar på "fileload", "progress" och "complete" händelser. Fileload händelsen brinner när en enda fil har laddats, framsteg är för att få framåt i loadQueue och slutföra bränder när alla filer har laddats. I handleFileLoad () funktion vi loggar filtypen, vilket kan vara mycket användbart. Vi kontrollerar också objektets id, Så här kan du hålla koll på preloaderna och göra något som är lämpligt med tillgångarna.

Observera att för att kunna ladda ljud måste du ringa installPlugin (createjs.Sound) som vi har gjort inom startPreload fungera.

TweenJS

TweenJS-biblioteket är för tweening och animering av HTML5- och JavaScript-egenskaper. Det ger ett enkelt men kraftfullt interpoleringsgränssnitt. Den stöder tweening av både numeriska objektegenskaper och CSS-stilegenskaper, och låter dig kedja tweens och åtgärder tillsammans för att skapa komplexa sekvenser.

För att ställa in en Tween, ringer du på Tween (mål, [rekvisita], [pluginData]) konstruktör med följande alternativ.

  • mål - Målobjektet som kommer att ha sina egenskaper tweened
  • rekvisita - Konfigurationsegenskaperna som ska tillämpas på denna inter-instans (till exempel sling: sant, pausat: sant). Alla egenskaper är vanliga till falska. Stödda rekvisita är:
    • slinga: sätter slingegenskapen på denna tween.
    • useTicks: använder fästingar för alla håll i stället för millisekunder.
    • ignoreGlobalPause: ställer in ignoreGlobalPause-egenskapen på denna tween.
    • åsidosätt: Om så är fallet kommer Tween.removeTweens (target) att kallas för att ta bort eventuella andra tweens med samma mål.
    • pausad: anger om du vill starta pausen pausad.
    • position: anger startpositionen för denna tween.
    • onChange: anger en lyssnare för händelsen "förändring".
  • pluginData - Ett objekt som innehåller data för användning av installerade plugins

Tween-klassen tweens egenskaper för ett enda mål. Instansmetoder kan kedjas för enkel konstruktion och sekvensering. Det är inte en mycket stor klass och har bara några metoder, men det är mycket kraftfullt.

De till (rekvisita, varaktighet, enkelhet) metod, köer en tween från de aktuella värdena till målegenskaperna. Ställ in varaktighet till 0 att hoppa direkt till värdet. Numeriska egenskaper kommer att tweened från deras nuvarande värde i tween till målvärdet. Icke-numeriska egenskaper kommer att ställas in vid slutet av den angivna varaktigheten.

De vänta (varaktighet, passiv) köer en väntan (väsentligen en tom tween).

De samtal (återuppringning, params, omfattning) metod Köpar en åtgärd för att ringa den angivna funktionen

TweenJS stöder ett stort antal lättnader som levereras av Ease-klassen.

I följande demo kan du klicka på scenen för att se demoen.

I den här demo skapar vi Bitmap och Text objekt. Vi lägger logotypen från toppen av scenen och när användaren klickar på scenen sitter vi mellan den i mitten av scenen och ändrar sin X- och Y-skala. Vi använder vänta() metod för att ge en sekundsfördröjning, då använder vi ring upp() metod för att mellanliggande texten. I textintervallet byter vi alfabetet, gör en 360 graders rotation, mellan den till vänster om scenen.

TweenJS är mycket roligt, försök att använda några av de andra egenskaperna i bildobjekten

SoundJS

SoundJS är ett bibliotek som ger en enkel API och kraftfulla funktioner för att arbeta med ljud en bris. Det mesta av detta bibliotek används statiskt (du behöver inte skapa en instans). Det fungerar via plugins som abstraherar det faktiska ljudimplementet, så uppspelning är möjlig på vilken plattform som helst utan specifik kunskap om vilka mekanismer som behövs för att spela ljud.

För att använda SoundJS, använd det offentliga API: n på klassen Sound. Detta API är för:

  • Installera ljuduppspelnings plugins
  • Registrering (och preloading) låter
  • Skapa och spela ljud
  • Mastervolym, stäng av och stoppa kontrollerna för alla ljud samtidigt

Uppspelning av ljud skapas SoundInstance instanser som kan styras individuellt. Du kan:

  • Pausa, återuppta, söka och stoppa ljud
  • Styra ljudets volym, stäng av ljudet och panorera
  • Lyssna på händelser på ljudinstanser för att få meddelande när de är färdiga, loop eller misslyckas

Nedan är den minsta koden du behöver spela en ljudfil.

createjs.Sound.initializeDefaultPlugins (); createjs.Sound.alternateExtensions = ["ogg"]; var myInstance = createjs.Sound.play ("IntoxicatedRat.mp3");

Jag kunde dock inte få det att fungera på min maskin i Firefox och Chrome, även om ovanstående arbetade i IE. Standardinställningen gick till WebAudio, jag var tvungen att registrera den för att använda HTMLAudio enligt nedan.

createjs.Sound.registerPlugins ([createjs.HTMLAudioPlugin]); console.log (createjs.Sound.activePlugin.toString ()); createjs.Sound.alternateExtensions = ["ogg"]; var mySound = createjs.Sound.play ("IntoxicatedRat.mp3");

I ovanstående sektioner av kod använder vi alternateExtensions egenskap som försöker ladda filtypen OGG om den inte kan ladda MP3.

Med de allra bästa grunderna kommer vi nu att skapa en MP3-spelare. Se demo och skärmdump nedan.


Vi ringer först registerPlugins () att använda HTMLAudio och ange alternativ förlängning så det kommer att försöka ladda OGG om webbläsaren inte stöder MP3.

createjs.Sound.registerPlugins ([createjs.HTMLAudioPlugin]); createjs.Sound.alternateExtensions = ["ogg"];

Inom Spelljud() funktion, vi kallar spela() metod som spelar en av ljudfilerna från spår array. Vi ställer in ljudvolymen med hjälp av setVolume () metod använder vi den "kompletta" lyssnaren för att vara orolig när det nuvarande ljudet är färdigt att spela.

theMP3 = createjs.Sound.play ("./ sounds /" + tracks [currentSong] + ". mp3"); theMP3.setVolume (vol); theMP3.on ( "komplett", songFinishedPlaying, null, false);

Under resten av koden använder vi spela(), sluta(),paus() och återuppta() metoder.

theMP3.play (); theMP3.stop (); theMP3.pause (); theMP3.resume ();

Jag har inte gett en rad förklaring av mp3-spelaren, men om du har några frågor, var god att fråga i kommentarerna.

Space Invader Game

Som nämnts i den första halvan av denna handledning, här är en demo av Space Invaders-spelet med förspänning, ljud och tweens tillagt.

Slutsats

Detta avslutar vår turné av CreateJS. Förhoppningsvis från de två senaste artiklarna har du sett hur lätt det är att skapa en rik interaktiv applikation med CreateJS.

Dokumentationen är topp och det kommer med en stor mängd exempel, så var noga med att kolla in dem.

Jag hoppas att du har hittat denna handledning för att vara till hjälp och att du är glad att använda CreateJS. De har just meddelat på sin blogg att betaversion för WebGL nu också är tillgängligt. Tack för att du läser!