Etant donné que ce que j’aime par dessus tout c’est de développer des jeux, beaucoup de choses reviennent souvent. Ce projet va dans le même sens que l’éditeur 3D, faciliter la tâche. Il s’agit (pour l’instant) d’un des morceaux indispensable a un moteur d’AI: les déplacements. Les autres étant, la prise de décision (solo ou en équipe) et les stratégies (solo ou équipe également). Ces 2 dernières étant hors de ma portée actuellement et demandant un niveau en math que je suis loin d’avoir je commence par la première :p Ca tombe bien c’est celle dont j’ai le plus besoin !
Pour faire simple il s’agit de comportement. Par la suite il suffit d’assigner un comportement a différents agents et laisser la magie opéré. J’ai commencé ce projet tout récemment donc il n’y a pas encore de comportement « avancé », mais je suis déjà bien content du résultat, j’ai déjà eu l’occasion de les tester dans des projets et ca fonctionne assez bien.
Guide d’utilisation
- Choisissez d’abord un comportement dans la liste au dessus.
- Cliquez sur le bouton ‘Start’ pour démarrer la simulation
- A tout moment vous pouvez déplacer l’agent rouge (la cible), pour voir comment l’agent ’source’ va se comporter.
- Les 2 NumericStepper a droite du bouton start permettent respectivement de modifier le nombre d’image seconde, et le dernier est en quelque sorte un facteur d’intensité. Selon la simulation choisie les résultats seront différents, parfois surprenant même !
PS: Les traits fléchés jaunes représentent la vélocité des agents. L’agent jaune présent dans la simulation ‘Pursue’ représente lui la position « d’impact » optimale pour la prédiction de mouvement.
Site flash évènementiel créé à l’occasion des 125 ans du parti socialiste.
Réalisé dans le cadre de mon travail dans la société studio4u
Date de création: Mars/avril 2010 Mon rôle: Développement du client flash (en as3). Spécificité(s): Le site s’adapte a la fenêtre du navigateur, on peut la redimensionnée et le site s’adapte dans les limites du possible. Tout le contenu est rapatrié (via script php) d’un CMS (dont je ne suis pas l’auteur). Les différentes galeries sont également un peu particulière dans le sens ou elles sont infinies.
Version ‘preview’ d’un jeu que j’ai réalisé dans le cadre de mon travail dans la société www.studio4u.be pour le site www.moukill.be. Il s’agit simplement d’un puzzle. Il faut replacer les pièce au bon endroit.
Date de création:Novembre 2009 Mon rôle: Développement du client flash.
Version ‘preview’ d’un jeu que j’ai réalisé dans le cadre de mon travail dans la société www.studio4u.be pour le site www.moukill.be. Il s’agit simplement de trouver sous quel gobelet la balle est cachée. La vitesse accélère au fil du temps.
Date de création: Novembre 2009 Mon rôle: Développement du client flash.
Comme on peut le voir dans mes précédents post, lorsqu’il s’agit de 3D j’utilises beaucoup away3D. Seulement ca prend vite beaucoup de temps lorsqu’il s’agit de faire une véritable application. Je me suis donc lancé dans la création d’un éditeur qui pourrait me permettre (à terme) de faire la plus grande partie du travail gràce à lui.
Pour l’instant il est assez sommaire, je mets les principaux éléments en place au fur et à mesure. On peut créer des forme géométriques, import des modèles 3dsmax directement sur la scène, appliquer une texture et modifier certaines propriétés. Ma ToDo list est déjà bien remplies, mais prochainement je mettrais en place la modification du nombre de segments horizontaux/verticaux, un début de gestionnaire d’animations et l’export. L’export sera plus que probablement généré en XML. Donc pour utiliser la scène créée via l’éditeur, il faudra inclure un swc propre à l’éditeur et l’initialiser en lui passant comme paramètre le répertoire content les xml générés précédemment. Il se chargera du rendu, des animations et tout ce qui s’en suit.
Pour l’instant rien n’est vraiment « figé », je m’en servait surtout comme sandbox au début, pour tester rapidement la disposition de mes élements & textures., ce n’est que par la suite que j’ai songé a en faire un éditeur.
Cliquez sur l’image pour voir un visuel.
Le swf est très grand, 1600×1200.
En parallèle a l’éditeur je continue encore et toujours à développer un tower défense multijoueur. Lui a par contre bien plus avancé.
Résumé des grosses modifs.
- Le multijoueur fait son entrée. J’ai opté pour smartfox server, qui me convient particulièrement bien, l’api est bien documenté et agréable a utilisé.
- Différents modes multijoueurs sont en test pour le moment.
Il y’a tout d’abord un classique « chacun pour soi, pve ». Chaque joueur a son propre plateau, & spawns de monstres. Le gagnant étant celui qui amasse le plus de point en fin de partie.
Ensuite il y’a une variante du précédent mais par équipe de 2/3/4 joueurs. Le principe reste le même sauf que chaque équipe partage un même plateau & spawns.
Une autre variante elle est le collaboratif. Tout les participants partagent un même plateau ! Ce qui demande un bon travail d’équipe, si un des joueur ne gère pas bien les spawns, il peut, a lui seul, faire perdre tout l’équipe !
Les autres modes sont +- similaire, hormis que les joueurs s’affrontent directement. Pas de spawn de mob « automatique ». Ici ce sont les joueurs qui s’envoient des monstres mutuellement
D’autre sont prévu, mais leur développement est bien trop peu avancé que pour en parler pour l’instant.
- Le processus pour rejoindre une partie fait ses débuts aussi. Pour l’instant il y’a 3 étapes. La première consiste a choisir le server (entrainement, tournoi, classé etc…), la seconde est le lobby. Liste de toutes les parties en cours sur le server choisi. La 3ième est la salle du jeu proprement dit. L’host choisi la carte, le mode de jeu. Les joueurs doivent choisir une couleur, une équipe si besoin et la partie commence une fois tout le monde prêt.
- Une minimap fait son apparition aussi, avec divers options. On peut par exemple basculer entre affichage 2D Top-Down, ou 2D iso. On peut également la « figée » ou pas. Figée: lorsque l’on fait pivoter la plateau, la minimap elle ne tourne pas.
Comment commencer une partie
Tout d’abord la connexion, on peut rentrer n’importe quoi il faut juste 4 charactères minimum pour le login et le mot de passe.
Une fois loggé, la liste des server apparait, entraînement par exemple.
Ensuite on voit la liste des parties en cours. Train1 par exemple.
Ici on peut attendre d’autres joueurs ou jouer seul.
Il faut IMPERATIVEMENT choisir une carte via le bouton ‘Game Configuration’ ET chaque joueur doit choisir sa couleur (carré a droite du pseudo). Ensuite les joueurs doivent clicker sur le bouton ‘ready’, l’admin verra alors le bouton ‘Start’ (précédemment grisé) devenir disponible, et la partie commence.
Ca avance ! Pas aussi vite que je souhaiterais, ca prend du temps lorsqu’on est seul et je me suis beaucoup consacré a mon boulot ce qui me laissait peu de temps libre. Mais bon petit à petit le bout du tunnel approche
Je ne vais pas faire une liste des fonctionnalités rajoutées depuis. Elle serait un peu longue et pas très intéressante. Alors qu’une demo ca c’est plus parlant !
Je ferais juste un bref résumé des grosses modifs.
- On peut désormais éditer plusieurs plateaux en même temps. Ce qui est bien pratique si on souhaite réalisé un ensemble de maps « thématique ».
- On peut également parcourir différents tilesets désormais. Une navigation par onglet (similaire à celle utilisée pour les plateaux) permet de change de tileset. Sur la droite il y’a une double flèche permettant de basculer entre 2 affichage de façon a facilité la recherche de tile, sans gêné la construction.
Pour le reste il s’agit davantage de tweaks divers & variés.
En travaillant sur le jeu eXtreme TD, j’ai plusieurs fois eu besoin d’avoir recourt aux gradients (dégradé), pour le fond du jeu, pour les fenetres (tel que le chargement) et pour le système de tooltip.
Ceux qui ont déjà eu besoin d’en faire savent a quel point c’est pénible de faire un gradient en partie a cause de tout les paramètres que l’on doit fournir. On peut facilement atteindre une dizaine de ligne pour faire un gradient, et a partir du moment ou on en fait plusieurs, je vous laisse imaginer le nombre de lignes que ca peut faire pour « simplement » dessiné un dégradé…
Je me suis donc bidoullé une classe gradient pour faciliter ces manoeuvres, je l’ai adapté a mes besoins donc vous devrez peut être l’arranger pour qu’elle vous convienne ceci dit.
La classe permet aussi de dessiner un gradient vertical ou horizontal suffit de le préciser, et elle repositionnera le gradient pour éviter les décalage du a la modification de la rotation.
//Gradient.as
package tools {
/**
* ...
* @author Cédric 'Slade' Vermeulen
*/
import flash.display.Graphics;
import flash.display.Sprite;
import flash.geom.Matrix;
import flash.display.SpreadMethod;
import flash.display.GradientType;
import flash.display.InterpolationMethod;
public class Gradient
{
public static const HORIZONTAL:uint = 0;
public static const VERTICAL:uint = 1;
private static var gradient:Sprite;
private static var type:String = GradientType.LINEAR;
private static var spread:String = SpreadMethod.PAD;
private static var interpolation:String = InterpolationMethod.LINEAR_RGB;
public static function newGradient(colours:Array, ratios:Array, width:uint, height:uint, sens:uint = 0, round:uint = 0, border:Boolean = false):Sprite {
var gWidth:Number = width;
var gHeight:Number = height;
var matrix:Matrix = new Matrix();
var alphas:Array = new Array();
gradient = new Sprite();
for (var i:uint = 0; i < colours.length; i++ ) { alphas.push(1); }
if(sens == 1){
gradient.rotation = 90;
gradient.x = gWidth;
gWidth = height;
gHeight = width;
}
matrix.createGradientBox( gWidth, gHeight );
if(border == true){ gradient.graphics.lineStyle(2, 0x333333); }
gradient.graphics.beginGradientFill( type, colours, alphas, ratios, matrix );
gradient.graphics.drawRoundRect(0, 0, gWidth, gHeight, round, round);
gradient.graphics.endFill();
return gradient;
}
}
}
pour l’utiliser il faut procéder comme suit
//ExampleGradient.as
package
{
/**
* ...
* @author Cédric 'Slade' Vermeulen
*/
import flash.display.Sprite;
import tools.Gradient;
public class ExampleGradient extends Sprite
{
private var gradient:Sprite;
public function ExampleGradient():void {
gradient = new Sprite();
gradient = Gradient.newGradient([0x1C5059, 0x012438], [0, 255], 800, 600, Gradient.VERTICAL);
addChild(gradient);
}
}
}
Personnellement je ne joue jamais avec l’alpha pour des gradients, donc je ne passe aucun array d’alphas, c’est la classe Gradient qui va les générer en fonction du nombre de couleurs.
Voila je sais pas si ça peut être utile à quelqu’un mais moi ca m’a bien servi !
Pour télécharger les sources cliquez ci-dessous
ExampleGradient (unknown, 38 hits) You need to be a registered user to download this file.
Recent Comments