Avec AIR 2.5, il est possible de détecter les boutons BACK, MENU et SEARCH du téléphone.
Pour ce faire, il faut appliquer un écouteur sur l'évènement KEY_DOWN du clavier :
stage.addEventListener( KeyboardEvent.KEY_DOWN, onKeyDown);
private function onKeyDown( pEvt: KeyboardEvent ):void
{
switch( pEvt.keyCode )
{
case Keyboard.BACK:
// sur la pression du bouton retour
break;
case Keyboard.MENU:
// sur la pression du bouton menu
break;
case Keyboard.SEARCH:
// sur la pression du bouton recherche
break;
}
}
Cependant, avec le code précédent, une pression sur un des trois bouton va quitter l'application AIR.
Pour éviter cela, il faut utiliser la méthode preventDefault sur l'évènement du clavier :
case Keyboard.BACK:
// sur la pression du bouton retour
pEvt.preventDefault();
break;
Lire la suite >>
Depuis la disponibilité du Flash Player 10.1 et de AIR 2.0, nous pouvons accéder à l'accéléromètre.
Plusieurs jeux et applications, principalement sur téléphone mobile l'utilise déjà depuis un certain temps.
Voici comment l'utiliser.
La classe Accelerometer se trouve dans le package flash.sensors :
import flash.sensors.Accelerometer;
import flash.events.AccelerometerEvent;
La classe Accelerometer fournie une variable permettant de déterminer si la fonction est prise en charge par l'appareil, ce qui permet, dans le cas contraire, ajouter un controle différent (clavier par exemple).
if (Accelerometer.isSupported)
trace('Accelerometer supported');
else
trace('Accelerometer not supported');
Lire la suite >>
Gedit étant mon éditeur préféré, il se devait d'y avoir un fichier de coloration pour AS3 et MXML.
En cherchant un peu, j'ai trouvé les fichiers de coloration pour Flex (comprenant bien évidement AS3 et MXML) ici.
Seul souci, lors du passage à Flex 4, le code compris dans les balises < fx:Script > apparait surligné en rouge :

Pas très joli me direz-vous.
Pour modifier ce petit désagrément, il suffit de rajouter le code suivant :
Lire la suite >>
Lorsque nous développons une application sous Flex, nous avons souvent besoin d'utiliser des icones.
La solution la plus simple évidement est la suivante :
< mx:Button label="Delete" icon="@Embed(source='assets/images/delete.png')"/>
Mais lorsque cet icone apparait plein de fois dans l'application, on ne va pas la réimporter à chaque fois, sinon le code va vide devenir lourd, et ça pour rien.
La meilleure solution, est de créer une classe qui va ne s'occuper que de ça. Nous allons l'appeler IconLibrary (original non ?)
package fr.revolugame.assets
{
/**
* Les icones utilisées dans l'application
*/
[Bindable]
public final class IconLibrary
{
[Embed(source="assets/images/delete.png")]
public static const DELETE:Class;
// ...
}
}
Et lorsque nous voulons l'utiliser dans un mxml :
< ![CDATA[
import fr.revolugame.assets.IconLibrary;
]]>
< mx:Button label="Delete" icon="{IconLibrary.DELETE}"/>
Cela permettra d'avoir un code nettement plus propre et probablement moins lourd sur de grosses applications.
Si nous voulons encore plus optimiser la chose, il est recommandé de compiler cette librairie dans un swc et de l'importer ensuite dans notre application. Car de ce fait, nous n'aurons pas besoin de recompiler toutes les icones a chaque fois, et pourrons réutiliser cette librairie dans d'autre application.
Lire la suite >>
Voici une petite astuce qui permet d'optimiser une application Flash. Plutôt que d'importer les images en MovieClip, ce qui se veut être couteux en terme de performance, il vaut mieux passer par la classe Bitmap et la classe BitmapData pour récupérer les pixels souhaités pour ensuite les afficher. Et par la même occasion, faire une seule requête sur le serveur est moins couteux (par exemple si vous avez une application nécessitant beaucoup de pictogrammes).
Voici comment faire.
Tout d'abord, il faut importer l'image de la bibliothèque :
[Embed(source = 'monImage.png')] private var MonImg:Class;
var pic : Bitmap = new MonImg();
Maintenant que nous avons notre image au format Bitmap, nous pouvons travailler dessus.
var bmp1 : BitmapData = pic.bitmapData; // récuperation des données
var bmp2 : BitmapData = new BitmapData(18, 16, true); // création de données, avec la taille de l'image finale
var rect : Rectangle = new Rectangle(0, 0, 18, 16); // création de la zone de découpage
var pt : Point = new Point(0, 0); // création du point de fixation de la zone découpée sur la nouvelle image
bmp2.copyPixels(bmp1, rect, pt); // on copie les pixels dans la nouvelle zone
var bmp : Bitmap = new Bitmap(bmp2); // création de notre nouvelle image
Et voilà, nous pouvons maintenant utiliser notre image comme nous le souhaitons, en l'ajoutant à la liste d'affichage par exemple.
Lire la suite >>
L'
API YouTube permet de lire des vidéos stockées sur
YouTube.com directement dans vos applications Flash. Elle permet également de personnaliser l'apparence du lecteur. Voici une brève introduction.
La documentation officielle est présente
ici.
Récupération de l'API
Pour pouvoir utiliser l'API dans votre application, il est nécessaire de faire une requete pour recuperer le swc sur le serveur de YouTube. Pour ce faire :
_loader = new Loader();
_loader.contentLoaderInfo.addEventListener(Event.INIT, onLoaderInit);
_loader.load(new URLRequest("http://www.youtube.com/apiplayer?version=3"));
Utilisation de l'API
Une fois que la librairie à été chargéé, nous pouvons la récuperer et ajouter les écouteurs sur les différentes actions :
private function onLoaderInit(event:Event):void {
addChild(_loader);
_loader.content.addEventListener("onReady", onPlayerReady);
_loader.content.addEventListener("onError", onPlayerError);
_loader.content.addEventListener("onStateChange", onPlayerStateChange);
_loader.content.addEventListener("onPlaybackQualityChange", onVideoPlaybackQualityChange);
}
Une fois que notre lecteur est prêt, nous pouvons charger et lancer la vidéo :
private function onPlayerReady(event:Event):void {
// Récupération de l'API youtube.
_player = _loader.content;
// On lance notre vidéo à partir de son identifiant
_player.loadVideoById(VIDEO_ID);
// On définie la taille de la vidéo
_player.setSize(480, 270);
}
Lire la suite >>
La classe TextField permet d'ajouter du texte dans une application Flash, zone de texte ou zone de saisie. Mais lorsqu'on souhaite utiliser beaucoup d'occurrence de celle-ci, et des les animer, il se peut que les performances en prennent un gros coup. Pour optimiser tout ceci, il suffit de passer par la classe Bitmap.
La classe Bitmap permet, quand à elle, de représenter des objets d'affichage. Elle va donc nous permettre de transformer nos textes en images. Voici comment faire :
import flash.display.Bitmap;
import flash.display.BitmapData;
import flash.text.TextField;
var monTexte : TextField = new TextField();
monTexte.text = "Hello World";
monTexte.autosize = flash.text.TextFieldAutoSize.LEFT;
var bmp : BitmapData = new BitmapData(monTexte.width, monTexte.height);
bmp.draw(monTexte);
var bitmap : Bitmap = new Bitmap(bmp);
addChild(bitmap);
Une petite optimisation qui peut vraiment être utile lors du développement de grosses applications utilisant beaucoup de zone de texte.
Lire la suite >>
Dans ce tutoriel, nous allons voir comment développer une classe permettant de créer une fenêtre disposant d'un bouton de fermeture et du système de Drag and Drop.
La partie graphique
Pour commencer, notre classe a besoin de plusieurs paramètres, tel
que son parent, sa couleur, ou encore son contenu.
Voici la signature de notre classe :
public function PopUp(_parent:Stage, _color:uint, content:MovieClip):void
Dans le constructeur, nous instancions les différentes parties de notre fenêtre, puis nous dessinons le cadre et l'entête.
Lire la suite >>
Le Flash Player 10 intègre une nouvelle fonctionnalité particulièrement intéressante.
En effet, nous pouvons modifier
le curseur de la souris en utilisant la propriété
cursor de la classe
flash.ui.Mouse.
Pour ce faire, nous devons lui attribuer une des constantes de la classe
flash.ui.MouseCursor :
- MouseCursor.AUTO : l'état par défaut
- MouseCursor.ARROW : le curseur représentant la flèche
- MouseCursor.BUTTON : le curseur en forme de main appuyant sur un bouton
- MouseCursor.HAND : le curseur en forme de main réalisant un glissement
- MouseCursor.IBEAM : le curseur en I de sélection de texte
Voici un petit exemple :
import flash.ui.Mouse;
import flash.ui.MouseCursor;
Mouse.cursor = MouseCursor.HAND;
L'utilisation de cette classe simplifie le changement de curseur à l'exécution, ce qui permet une meilleure intégration et utilisation de votre application par les utilisateurs qui retrouverons le confort d'utilisation de leur système.
Lire la suite >>
Dans ce tutoriel, nous allons voir comment créer une classe réutilisable pour faire une scrollbar horizontale. Elle permettra de déplacer un contenu dynamique (texte, image, ...).
Aspect visuel : la classe graphics
Comme nous souhaitons avoir une classe entièrement réutilisable, il nous faut pouvoir ajouter des éléments graphiques indépendamment du projet en cours. Pour cela, nous allons utiliser la classe graphics qui va nous permettre de dessiner les composants.
Pour cela, nous avons besoin de plusieurs paramètres : la largeur et la hauteur de notre scrollbar. Ces deux valeurs seront des attributs de notre classe. Voici notre fonction qui s'occupe de dessiner :
private function draw():void {
var bg : Shape = new Shape();
bg.graphics.beginFill(_bgColor);
bg.graphics.lineStyle(0x000000);
bg.graphics.drawRect(0, 0, _largeur, _hauteur);
bg.graphics.endFill();
addChild(bg);
}
Et maintenant celle qui dessine le scroller (élément qui nous permet de déplacer le contenu) :
private function drawScroller():void {
// petite vérification, pour ne pas dessiner de scroller s'il n'y en a pas besoin
if (_scrollContent.height > _hauteur) {
var coeff : Number = _scrollContent.height / _hauteur;
var tmp_scroll_height : Number = _hauteur / coeff; // pour verif que le scroller n'est pas trop petit
if (tmp_scroll_height < 20) tmp_scroll_height = 20;
_scroller = new Sprite();
_scroller.graphics.beginFill(0x000000);
// on dessine notre rectangle avec un petit décalage
_scroller.graphics.drawRect(2, 2, _largeur - 4, tmp_scroll_height);
_scroller.graphics.endFill();
_scroller.addEventListener(MouseEvent.MOUSE_DOWN, dragOn);
_scrollContent.parent.stage.addEventListener(MouseEvent.MOUSE_UP, dragOff);
addChild(_scroller);
_scroller.buttonMode = true;
// rectangle qui correspond à la trajectoire du scroller
rect_scroller = new Rectangle(0, 0, 0, _hauteur - _scroller.height - 4);
}
}
Lire la suite >>
Voici quelques bonnes pratiques nécessaire à adopter lors de développement d'application en ActionScript3.
Tout d'abord, il est nécessaire de toujours typer ses variables afin d'optimiser les performances et garantir une meilleure gestion des erreurs à la compilation et à l'exécution. Par exemple, préférer
var i : int = 0;
à
var i = 0;
Par contre, si une variable peut contenir n'importe quel type de données, nous pouvons utilisez le type *.
Lorsque vous utilisez une boucle, il est préférable de passer par une variable de référence, pour éviter que la machine virtuelle ne réévalue la longueur à chaque itération. Exemple :
Lire la suite >>
Pour rendre une image en noir et blanc sans passer par la création d'une nouvelle image, il faut utiliser la propriété filters d'un objet d'affichage. Il faut lui passer en paramètre un tableau de ColorMatrixFilter, qui permet d'appliquer une transformation de matrice aux couleurs RVBA (Rouge, Vert, Bleu et Alpha) sur l'image d'entrée afin d'obtenir un résultat intégrant un nouvel ensemble de valeurs.
Cette classe permet d'effectuer des modifications de saturation et des rotations de teinte, de définir la luminance de l'alpha et de produire d'autres effets. Vous pouvez appliquer le filtre à tout objet d’affichage (autrement dit, aux objets héritant des propriétés de la classe DisplayObject), tels que MovieClip, SimpleButton, TextField et Video, ainsi qu’aux objets BitmapData.
Autant vous dire qu'on peut faire ce qu'on veut à partir de cette fonction.
var a : Array< Float > = new Array();
a = a.concat([0.3086, 0.6094, 0.0820, 0.0, 0.0]); // rouge
a = a.concat([0.3086, 0.6094, 0.0820, 0.0, 0.0]); // vert
a = a.concat([0.3086, 0.6094, 0.0820, 0.0, 0.0]); // bleu
a = a.concat([0.0, 0.0, 0.0, 1.0, 0.0]); // alpha
var filtre : ColorMatrixFilter= new ColorMatrixFilter(a);
monClip.filters = [filtre];
Lire la suite >>
Qui n'a jamais eu envi de passer un paramètre lors d'un évènement dans une application Flash ?
Voici la solution !
Prenons par exemple, un évènement clic. Nous avons alors un écouteur de ce type :
addEventListener(MouseEvent.CLICK, maFonction);
Avec la fonction :
private maFonction(e:MouseEvent):void {
...
}
Maintenant, pour passer un paramètre :
addEventListener(MouseEvent.CLICK, function(e:*):void { maFonction(e, maVar) });
private maFonction(e:MouseEvent, maVar:String):void {
trace(maVar);
}
Lire la suite >>
Il peut s'averer nécessaire de changer la couleur d'un élément dans un jeu par exemple pour différencier deux éléments selon les joueurs.
Voici comment faire sans créer plusieurs images de couleurs différentes.
// récupération de la couleur de départ de l'objet
var myColor:ColorTransform = myObject.transform.colorTransform;
// on lui affecte maintenant la couleur qu'on souhaite
myColor.color = 0x000000; // la valeur hexa de ma couleur
// puis on l'applique à notre objet
myObject.transform.colorTransform = myColor;
Si vous souhaitez utiliser les couleurs RGB, il faut créer une instance de la classe colorTransform en lui passant les paramètres RGB de votre couleur :
myColor : ColorTransform = new ColorTransform(0,0,0,1,redValue,greenValue,blueValue,0);
myObject.transform.colorTransform = myColor;
Avec redValue, greenValue et blueValue des variables
Float (haXe) ou
Number (AS3).
Lire la suite >>
Voici une méthode relativement simple pour faire un dégradé en Flash. D'une part ça coute moins en terme de ressource qu'une image, et d'autre part ce n'est pas compliqué a faire.
Nous allons voir la version haXe. Pour la version AS3, c'est la même, à l'exception de la syntaxe de certaine classes, ou types.
Voici le fonctionnement :
/**
* Création d'un rectangle contenant un dégradé
*/
var degrade : Shape = new Shape();
// Bordures du rectangle
degrade.graphics.lineStyle(2, 0x0043AB);
// Matrice de transformation du dégradé
var matrice:Matrix = new Matrix();
matrice.createGradientBox(250, 50); // largeur et hauteur du dégradé
degrade.graphics.beginGradientFill(GradientType.LINEAR, [0xA7C04A, 0xAD7FA8], [1, 1], [0, 255], matrice);
degrade.graphics.drawRect(0, 0, 250, 50);
degrade.graphics.endFill();
addChild(degrade);
La méthode beginGradientFill nécessite quelques paramètres :
- le type de dégradé (LINEAR ou RADIAL)
- le tableau des couleurs
- le tableau des opacités de chaque couleur
- le tableau de positionnement des couleurs
- la matrice de transformation de type flash.geom.Matrix (optionnelle)
Lire la suite >>
Il est souvent utile dans les projets flash d'utiliser des librairies externes. Voici le code nécessaire au chargement de l'une d'entre elles en ActionScript3.
Seulement quatre classes sont nécessaires pour utiliser notre librairie :
import flash.display.Loader;
import flash.net.URLRequest;
import flash.events.Event;
import flash.system.ApplicationDomain;
Création des variables :
var loader : Loader = new Loader();
var request : URLRequest = new URLRequest("lib.swf"); // chemin
// création de l'ecouteur de fin de chargement
loader.contentLoaderInfo.addEventListener(Event.COMPLETE, onComplete);
// chargement de la lib
loader.load(request);
Et pour terminer, l'utilisation d'une classe présente dans cette librairie.
Il existe deux manières de le faire, les voici :
private function onComplete(event:Event):void {
// 1ere solution
var maRessource : Class = loader.contentLoaderInfo.applicationDomain.getDefinition("maRessource") as Class;
var monClip = new maRessource();
// 2eme solution
ApplicationDomain.currentDomain.getDefinition("maRessource");
var monClip : maRessource = maRessource(event.target.content);
}
Lire la suite >>
Dans ce tutoriel, nous verrons comment réaliser un joli lecteur vidéo très simplement grâce aux nombreuses classes présentes dans le framework Flex.
La structure de notre application
Ce projet est composé de deux fichiers :
- VideoPlayer.mxml
- stylePlayer.css
Rentrons dans le vif du sujet en voyant la structure de notre mxml :
< ?xml version="1.0" encoding="utf-8"?>
< mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" width="512" height="408" layout="absolute" >
< mx:VideoDisplay id="video" width="512" height="384" autoPlay="false" source="mavideo.ext"
playheadUpdate="updatePlayer()" />
Tout d'abord, nous créons un composant VideoDisplay qui contiendra notre vidéo. Nous lui donnons une taille fixe pour éviter les redimentionnements hasardeux.
L'attribut autoPlay peut être défini à true ou false, dans le cas où l'on souhaite lancer la lecture de la vidéo au chargement de l'application ou non.
S'en suis la source de notre vidéo, ou plus exactement l'emplacement de notre fichier vidéo.
Pour terminer, nous ajoutons un évenement qui nous permettra de gérer l'avancement de notre vidéo.
Nous allons maintenant définir un bloc qui contiendra les boutons et les détails de notre lecteur.
Lire la suite >>
Commencons par le code
var root : MovieClip = flash.Lib.current;
root.stop();
root.loaderInfo.addEventListener (ProgressEvent.PROGRESS, function(event:ProgressEvent)
{
var pcent:Float=event.bytesLoaded/event.bytesTotal*100;
trace("Chargement : "+pcent+"%");
if(pcent==100) root.gotoAndStop(2)
}
);
Quelques explications :
Le stop() est la pour arreter l'avancement de l'animation.
On place ensuite un écouteur sur la progression total du chargement du swf, quand celui ci est terminé (égal à 100), on lance le reste de l'animation.
Dans l'exemple, on utilise la methode trace(), mais bien évidemment, vous pouvez créer une barre, ou n'importe quoi pour visualiser le chargement. Il suffit juste d'utiliser la variable pcent.
Lire la suite >>
Vous souhaitez enlever, voir personnaliser le menu qui apparait par defaut lors d'un clic droit ?
Alors voilà comment il faut faire. C'est relativement simple, mais fort utile.
Tout d'abord, voici comment l'enlever :
var menu = new flash.ui.ContextMenu();
menu.hideBuiltInItems();
flash.Lib.current.contextMenu = menu;
Et maintenant, pour ajouter un nouvel élément :
var nouvelItem = new flash.ui.ContextMenuItem("Texte a afficher", true, true, true);
// on ajoute une action sur le bouton
nouvelItem.addEventListener(flash.events.ContextMenuEvent.MENU_ITEM_SELECT, function(e){
flash.Lib.getURL(new flash.net.URLRequest("http://revolugame.com"), "_self");
}
menu.customItems.push(nouvelItem);
Rien de très compliqué.
Lire la suite >>
Showing - of Articles | Page of