Home » Categories » haxe

Point de départ pour un Tower Defense

Il y a quelques temps, je me suis lancé dans le développement d'un Tower Defense. Mais voilà, avec le boulot, et les projets qui s'accumulent, je ne suis pas allé bien loin.

 

Toutes fois, j'avais implémenté la création du niveau, des monstres, et leurs déplacements.

Ce code peut toujours vous servir de point de départ.

 

Voici les sources (commentées), mais si toutes fois, vous avez besoin de compléments d'infos, laissez un commentaire.

 

Main.hx

class Main {
	public static function main():Void {
		new TowerDefense(flash.Lib.current);
	}
}

Lire la suite >>


Un Slideshow en Flash

Dans ce tutoriel, nous allons voir comment réaliser un slideshow simple, en utilisant les tweeners pour les animations, et un timer pour les changements d'images.
Notre slideshow prendra en paramètre un fichier xml, dans lequel apparaitront les informations à afficher.

Ce tutoriel n'est pas là pour vous donner le code source, mais plutôt pour donner les bases pour la réalisation. Nous ne verrons pas en détail toute les classes, mais seulement les parties les plus importantes.

Pré-requis

Pour les animations, nous allons utiliser la librairie TweenerHX. Pour l'installer, plusieurs moyens.
Soit directement via haxelib :
haxelib install TweenerHX
Soit en allant récupérer les sources sur le site.

Structure du fichier XML

Chaque slide prendra comme paramètre : une image, un titre et un texte. Le titre et le texte étant optionnels.

                       
    First photo                 
    slide2.jpg 
    Description
  
                       
    2 photo                 
    slide3.jpg 
    Description 2
  


Chargement des données

Pour le chargement de notre fichier XML, nous allons utiliser la classe ChargeurXML dont voici le contenu :

Lire la suite >>


Optimisation d'une zone de texte

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 >>


Intégrer Mochiads à un projet haXe/Flash

Dernièrement, j'ai voulu intégrer Mochiads dans un projet Flash développé avec haXe. Mais après mettre rendu sur le site, je me suis aperçu, qu'aucune version haxe n'existait. J'ai donc demandé à notre cher ami Google ce qu'il en pensait. Après mainte recherche, je suis tombé sur le site de Viktor Hesselboom qui explique comment rendre accessible les librairies de Mochiads.

Voici comment les intégrer et les utiliser.

Pré-requis :


Intégrer les classes Mochiads à notre projet

Décompressez l'archive contenant les librairies de Mochiads, puis lancez la commande suivante :

compc -source-path . -output mochi.swc -include-classes mochi.as3.MochiAd mochi.as3.MochiDigits mochi.as3.MochiScores mochi.as3.MochiServices
(compc se trouvant dans le dosser bin du sdk de Flex si vous n'avez pas défini de variable globale)

Vous avez maintenant un fichier swc.

Un fichier swc est une archive contenant un fichier swf correspondant aux librairies, ainsi que d'autres ressources ne nous intéressant pas.

Récupérez le fichier library.swf (sous Windows, renommez le fichier en .zip).
Nous allons maintenant générer les entêtes des classes avec la commande :

Lire la suite >>


Changer la couleur d'un élément en AS3

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 >>


Faire un dégradé en Flash

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 >>


haXe Sound Spectrum

Après avoir développé quelques players audio en flash, je ne m'étais jamais interessé à l'utilisation d'un Sound Spectrum (ou spectre sonore en français).

C'est chose faite ! Voici mes deux premiers tests :
Le premier correspond à une ligne qui bouge, et le second à une suite de cercles.
(musique : Moqawama par DJad)


Votre lecteur Flash n'est pas à jour. Installer la dernière version

Lire la suite >>


Un peu de 3D

Un petit test en 3D avec haXe. Rotation d'une surface en utilisant la 3D "native" de flash10.
Voici le code source avec les explications nécessaires :

Lire la suite >>


Sécuriser ses jeux

Voici une classe qui vous permettra de sécuriser un minimum vos jeux ou applications flash.

Voici le code source :

class Sitelock {
    // liste des urls autorisées
    private static var urls_allowed : Array<String>;
    
    public static function init(list : Array<String> = null):Void {
        urls_allowed = list;
    }

    /**
     * @params :
     *    _url : url de provenance
     */
    public static function check(_url:String):Bool {
        var lock : Bool = true;
        var domain_parts = _url.split("://"); // on enleve le ://
        var real_domain : Array<String> = domain_parts[1].split("/");
        // on parcours le tableau a la recherche de l'url
        for (x in urls_allowed) {
            if (x == real_domain[0]) {// si le domaine est correct
                return false;
            }
        }
        return true;
    }
}
Pour l'initialisation : SiteLock.init(["url1","url2"]);
Puis pour la vérification : var test : Bool = SiteLock.check("url");
Si la fonction retourne faux, l'url est présente, et donc vous pouvez autoriser le lancement de l'application.

Lire la suite >>


Les relations 1:n avec neko

Les relations 1:n ne sont pas réellement plus compliquées que les relations 1:1.
Pour ce faire, nous allons partir d'un exemple simple et expliquer le déroulement des opérations l'une après l'autre.

Prennons le cas d'une personne qui possède une voiture. Une voiture est possédée par 1 et 1 seule personne, alors qu'une personne peut posseder 1 ou n voitures.

Notre classe voiture :

class Voiture extends neko.db.Object {
    public var id : Int;
    public var nom : String;
    public var id_proprietaire : Int;
    static var TABLE_NAME = "Voiture";
    static var TABLE_IDS = ["id"];

    static function RELATIONS(){ 
        return[{prop:"idU", key:"proprietaireId", manager:User.manager}];
    }

    public var proprietaireId : Int;
    public var idU(dynamic, dynamic):User;
}

Le manager de la voiture, qui possède une methode qui va récuperer la liste des voitures comportant l'identifiant du propriétaire passe en paramètre :

Lire la suite >>


Les relations 1:1 avec neko

Dans toute application web, nous avons souvent besoin de relations inter-table. Dans ce tuto nous allons voir les relations 1:1 en prenant par exemple un site sur une école.

Prennons la table élève, un élève possède un parrain, et un professeur est parrain au maximum d'un élève.

Voici en images les deux tables :

              

Elles restent relativement simple. Chaque personne (élève ou professeur) possède un identifiant, un nom et un identifiant qui permet de connaitre soit le parrain, soit le filleul.

Tout d'abord, nous devons créer les deux classes propres à chaque table.

Lire la suite >>


Barre de chargement en Flash9

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 >>


Créer un menu personnalisé pour le clic droit Flash9

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 >>


Faire un drag and drop en Flash9 avec haXe

But de ce tutoriel : créer un système de drag and drop d'un élément entre deux Sprites. Notre élément prendra la forme d'un cercle rouge, et nos conteneurs la forme de deux carrés bleus.


Le code

Lire la suite >>


Casse briques

Plutôt que de mettre le code en entier, je préfère faire quelques explications sur les parties les plus importante à mon goût. En ce qui concerne l'utilisation et la gestion des movieClips, je vous renvoie sur le tuto du même nom.

 

Création des niveaux

Le plus simple est d'utiliser un tableau pour chaque niveau.

bricks = new Array();
for ( y in 0...15 ) { // taille de mes niveaux
    for ( x in 0...12 ) {
        if (tabNiveau[y][x] == 1) {
            var newBrick:Brick = new Brick();
            // On fait les espacements nécessaires
            newBrick.x = 25*x;
            newBrick.y = 11*y+Cst.WALL_TOP+2;
// la variable Cst.WALL_TOP est une constante stockée dans le fichier Cst.hx dans la classe du même nom
            mv_main.addChild(newBrick);
            bricks.push(newBrick); // on met la cellule en fin de tableau
        }
    }
}

 

Mouvement de la raquette

Lire la suite >>


Créer et utiliser les MovieClips avec Haxe/SWFMill

Introduction

Avant de d'aller plus loin, il faut savoir que pour utiliser des images en ActionScript (et de la même façon avec haXe) nous avons besoin de les ajouter à une librairie, ou bibliothèque. Pour importer un clip (ou Movie Clip) dans la librairie, deux approches sont possibles. La première consiste à utiliser le logiciel propriétaire de Adobe : Adobe Flash CS3 (ou +). Les inconvénients sont bien évidemment les suivants : tout d'abord, la licence coûte assez cher (A partir de 836€ pour la version complète), ensuite l'environnement du logiciel est plutôt pénible et long à prendre en mains de par ses nombreuses options. Mais bien évidemment, ce logiciel est réellement utile si vous n'êtes pas familié avec le langage ActionScript et peut s'avérer assez rapide après la phase d'apprentissage.

 

Quelques captures de Flash CS3 :

           

 

La deuxième façon consiste à utiliser une librairie sous licence GNU GPL : SWFMill.

SWFMill est une librairie qui permet de générer des fichiers swf à partir de fichier xml ou xslt. Ses avantages sont bien évidemment sa gratuité mais également sa simplicité d'utilisation.

 

Utilisation de SWFMill

Pour commencer, nous allons créer une librairie contenant une seule image. Pour ce faire, ouvrez votre éditeur de texte, et saisissez :

Lire la suite >>