Ce didacticiel explique comment créer vos propres extensions de fichier dans Adobe AIR. Je vais vous montrer comment créer une petite application, enregistrer les positions d'un couple de vidéos et les recharger lors du lancement de l'application..
Suivez le mouvement et voyez si vous pouvez proposer vos propres utilisations pour les extensions de fichier personnalisées…
Ouvrez un nouveau document Flash Air, nommez-le "saveFile" et enregistrez-le dans un nouveau dossier. Ouvrez ensuite un nouveau fichier ActionScript, attribuez-lui le même nom et enregistrez-le dans le même dossier que le document Flash que vous venez de créer..
Si l'écran d'invite n'apparaît pas au démarrage de Flash, créez simplement un nouveau document Flash ActionScript 3. Enregistrez le fichier, puis sélectionnez Commandes> AIR - Paramètres de l’application et du programme d’installation. Flash convertira le fichier en un document Air.
Dans le panneau de propriétés du document Flash, tapez "saveFile" dans le champ Classe de document. Cela associera le nouveau fichier ActionScript (notre classe de document) au document Flash..
Créez un carré noir d'une hauteur de 52, définissez la largeur sur la largeur de la scène et alignez-le sur le coin inférieur gauche de la scène. Donnez au carré un alpha de 33. Dans le panneau des composants, faites glisser trois boutons et placez-les au-dessus du carré noir..
Attribuez à l'un des boutons le nom d'occurrence "open" et modifiez son étiquette pour indiquer "Open". Le bouton suivant aura un nom d'occurrence "enregistrer" et son étiquette sera "Enregistrer". Le troisième nom des boutons sera "image" et aura une étiquette "Image". Répartissez-les comme vous le souhaitez, sélectionnez les trois boutons et le carré noir, puis transformez-les en un seul MovieClip portant le nom d'occurrence "pied de page"..
Sur la scène, créez un cercle rouge avec une hauteur et une largeur de 50 px. Convertissez-le en MovieClip, puis dans la boîte de dialogue, appuyez sur le bouton "Avancé". Sous "Liaison", cochez la case "Exporter pour ActionScript". Donnez-lui un nom de classe "Rouge" et cliquez sur "OK".
Créez ensuite un cercle bleu de la même taille que le cercle rouge. Convertissez-le en MovieClip, exportez-le pour ActionScript et attribuez-lui un nom de classe "Blue". Supprimer les deux cercles de la scène, de sorte que le seul MovieClip restant soit le footer MovieClip.
Accédez à http://code.google.com/p/as3corelib/ et téléchargez le dossier zip as3corelib. Avec l'encodeur JPEG, nous pourrons enregistrer une image de nos petits cheveux.
Ceci est le cadre de base où nous allons mettre tout notre code.
package import flash.display.Sprite; Classe publique saveFile étend Sprite fonction publique saveFile ()
Voici les instructions d'importation pour que l'application Air fonctionne. Ceux-ci seront placés dans le fichier juste en dessous de la déclaration du paquet et au-dessus de la déclaration de classe publique.
import com.adobe.images.JPGEncoder; import flash.desktop.NativeApplication; import flash.display.BitmapData; import flash.display.MovieClip; import flash.display.Sprite; import flash.events.Event; import flash.events.InvokeEvent; import flash.events.MouseEvent; import flash.filesystem.File; import flash.filesystem.FileMode; import flash.filesystem.FileStream; import flash.net.FileFilter; import flash.utils.ByteArray;
Voici les variables que nous utilisons pour créer les deux petits cercles sur la scène. Les variables de décalage seront utilisées plus tard pour le glisser-déposer des cercles.
J'ai également affecté un écouteur d'événement d'invocation à l'application NativeApplication. Cela se déclenche lorsque l'application est lancée ou lorsque l'utilisateur clique sur le fichier personnalisé. La fonction invoke vérifiera comment l'application a été lancée. S'il s'agissait d'un fichier, il le chargera. Sinon, il appellera la fonction init.
Classe publique saveFile étend Sprite private var red: MovieClip; private var blue: MovieClip; private var currentClip: MovieClip; private var xOffset: Number; private var yOffset: Number; fonction publique saveFile () NativeApplication.nativeApplication.addEventListener (InvokeEvent.INVOKE, onInvoke); movieClips (); les auditeurs(); fonction privée init (): void var sw: int = stage.stageWidth; var sh: int = stage.stageHeight-footer.height; red.x = sw * Math.random (); red.y = sh * Math.random (); blue.x = sw * Math.random (); blue.y = sh * Math.random (); fonction privée movieClips (): void red = new Red (); bleu = nouveau bleu (); this.addChildAt (rouge, 0); this.addChildAt (blue, 1); this.addChildAt (footer, 2);
Cette fonction configure simplement les écouteurs d'événements pour tous les boutons et cercles de la scène..
fonction privée listeners (): void red.addEventListener (MouseEvent.MOUSE_DOWN, onDown); blue.addEventListener (MouseEvent.MOUSE_DOWN, onDown); footer.open.addEventListener (MouseEvent.CLICK, openClick); footer.save.addEventListener (MouseEvent.CLICK, saveClick); footer.image.addEventListener (MouseEvent.CLICK, imageClick);
Ici nous configurons les fonctions pour déplacer les cercles autour de la scène.
fonction privée onDown (event: MouseEvent): void currentClip = event.target as MovieClip; xOffset = mouseX - currentClip.x; yOffset = mouseY - currentClip.y; currentClip.removeEventListener (MouseEvent.MOUSE_DOWN, onDown); this.addEventListener (MouseEvent.MOUSE_UP, onUp, false, 0, true); this.addEventListener (MouseEvent.MOUSE_MOVE, onMove, false, 0, true); fonction privée onMove (événement: MouseEvent): void currentClip.x = mouseX - xOffset; currentClip.y = mouseY - yOffset; event.updateAfterEvent (); fonction privée onUp (événement: MouseEvent): void this.removeEventListener (MouseEvent.MOUSE_MOVE, onMove); this.removeEventListener (MouseEvent.MOUSE_UP, onUp); currentClip.addEventListener (MouseEvent.MOUSE_DOWN, onDown, false, 0, true);
Lorsque le bouton "Image" est cliqué, la fonction "imageClick" sera appelée. Cette fonction ouvre une boîte de dialogue de sauvegarde et vous pouvez donner à votre image le nom de votre choix. Lorsque l'utilisateur nomme l'image, il appelle la fonction "imageSave". Dans cette fonction, nous utilisons la classe JPGEncoder pour créer l'image. L'application Air enregistre ensuite l'image et écoute la fonction "onClose". Cette fonction réaffecte simplement les petits cercles à la scène à partir du sprite temporaire créé..
fonction privée imageClick (event: MouseEvent): void fichier var: File = File.desktopDirectory; file.browseForSave ("Enregistrer l'image"); file.addEventListener (Event.SELECT, imageSave); fonction privée imageSave (event: Event): void var temp: Sprite = new Sprite (); var len: int = this.numChildren; temp.addChild (rouge); temp.addChild (bleu); var bitmapData: BitmapData = new BitmapData (stage.stageWidth, stage.stageHeight); bitmapData.draw (temp); var jpg: JPGEncoder = new JPGEncoder (100); var byteArray: ByteArray = jpg.encode (bitmapData); var saveFile: File = File (event.target); Répertoire var: String = saveFile.url; if (directory.indexOf (".jpg") == -1) directory + = ".jpg"; var fichier: Fichier = nouveau Fichier (); fichier = fichier.resolvePath (répertoire); var fileStream: FileStream = new FileStream (); fileStream.addEventListener (Event.CLOSE, onClose); fileStream.openAsync (fichier, FileMode.WRITE); fileStream.writeBytes (byteArray); fileStream.close (); fonction privée onClose (event: Event): void this.addChildAt (red, 0); this.addChildAt (blue, 1);
(Remarque de l'éditeur: le commentateur Jesse nous a informé que le fonctionnement de la classe File avait changé depuis la publication de ce tutoriel. Voir son commentaire pour plus de détails sur la manière de rendre votre code compatible.)
Une fois que nous avons déplacé les petits cercles un peu, nous pouvons ensuite enregistrer leur emplacement pour une édition ultérieure. Ici, nous créons notre fichier personnalisé. Nous mettons d’abord les coordonnées dans un tableau, puis les tableaux sont placés dans un objet. L'objet est écrit dans un fichier avec notre extension de fichier personnalisée. Vous pouvez lui donner n'importe quelle extension que vous voulez.
Ensuite, nous définissons l'application comme application par défaut pour l'extension de fichier nouvellement créée..
fonction privée saveClick (événement: événement): void fichier var: Fichier = Fichier.desktopDirectory fichier.browseForSave ("Enregistrer"); file.addEventListener (Event.SELECT, onSaveSelect); fonction privée onSaveSelect (événement: événement): void objet var: objet = ; var redArray: Array = [red.x, red.y]; var blueArray: Array = [blue.x, blue.y]; object.RED = redArray; object.BLUE = blueArray; var saveFile: File = File (event.target); var directory: String = saveFile.url if (directory.indexOf (". tuts") == -1) directory + = ".tuts"; var fichier: Fichier = nouveau Fichier (); fichier = fichier.resolvePath (répertoire); var fileStream: FileStream = new FileStream (); fileStream.open (fichier, FileMode.WRITE); fileStream.writeObject (objet); fileStream.close (); NativeApplication.nativeApplication.setAsDefaultApplication ("tuts");
Si vous souhaitez ouvrir votre fichier nouvellement créé, cliquez simplement sur le bouton "Ouvrir". Une boîte de dialogue apparaît qui ne recherche que cette extension de fichier. L'application lira alors l'objet à l'intérieur du fichier et placera les petits cercles en conséquence.
fonction privée openClick (event: MouseEvent): void fichier var: File = File.desktopDirectory; file.addEventListener (Event.SELECT, onSelect); file.browseForOpen ("Ouvrir", [nouveau FileFilter ("Tuts Files (* .tuts)", "* .tuts")]); fonction privée onSelect (événement: événement): void fichier var: fichier = fichier (événement.target); var fileStream: FileStream = new FileStream (); fileStream.open (fichier, FileMode.READ); objet var: Object = fileStream.readObject (); red.x = object.RED [0]; red.y = object.RED [1]; blue.x = object.BLUE [0]; blue.y = object.BLUE [1]; fileStream.close ();
C'est la fonction invoke. Sans cette fonction, si vous deviez lancer l'application à partir de votre nouveau fichier, il ne saurait pas le charger. Cette fonction vérifie pour voir ce qui lui a dit d'ouvrir. S'il s'agissait d'un fichier, il sera chargé. Si ce n'était pas le cas, il appelle simplement la fonction "init" qui donne aux cercles un placement aléatoire.
fonction privée onInvoke (event: InvokeEvent): void if (event.currentDirectory! = null && event.arguments.length> 0) var directory: File = event.currentDirectory; var fichier: File = directory.resolvePath (event.arguments [0]); var fileStream: FileStream = new FileStream (); fileStream.open (fichier, FileMode.READ); objet var: Object = fileStream.readObject (); red.x = object.RED [0]; red.y = object.RED [1]; blue.x = object.BLUE [0]; blue.y = object.BLUE [1]; fileStream.close (); else init ();
Lorsque le fichier est entièrement testé et fonctionne correctement, nous sommes prêts à publier. Allez dans Commandes> AIR - Paramètres de l'application et du programme d'installation, puis affichez les paramètres de publication..
Dans les paramètres de publication Air, cliquez sur les paramètres avancés..
Cela fera apparaître une autre boîte de dialogue. Cliquez sur le bouton "plus" pour ajouter une extension de fichier..
Remplissez les descriptions de fichier, sélectionnez vos icônes personnalisées et cliquez sur "OK" jusqu'à ce que vous soyez de retour à la première fenêtre de paramètres de publication.
La dernière chose à faire est de publier votre fichier. Cliquez sur le bouton "Publier le fichier AIR". Vous devrez créer un certificat pour signer l'application avec. Cliquez simplement sur "Créer" pour afficher les paramètres..
Remplissez le formulaire et cliquez sur "OK". Flash vous avertira de la création du certificat. Lorsque le certificat est fait, entrez le mot de passe et votre fichier sera créé.
Ce n'était qu'un exemple de base de ce que l'on peut faire avec cette technique. Vous pouvez également créer une sorte d’application de dessin dans laquelle vous pouvez soit sauvegarder ce que vous avez dessiné, soit continuer à l’éditer. Ou si vous vouliez créer un lecteur MP3 personnalisé et disposer de votre propre format de fichier de liste de lecture. Les possibilités sont infinies…
J'espère que vous avez aimé suivre le tut.