Bonjour à tous, depuis peu je profite des quelques minutes de temps libre que j'ai par jour pour apprendre Flash et ActionScript.
Quelques points à prendre en considération : je suis une bille absolue en Maths, et mon code ressemble plus à du bricolage qu'à quelque chose de véritablement structuré =D
Maintenant passons à ce qui me pose soucis
J'entreprend la création d'un jeu flash, un jeu de Tower Defense. Je n'utilise pas une map faite de tile, mais une image et j'utilise actionscript pour gérer le tout.
Pour le moment j'ai réussi à créer ma map, donner la possibilité de créer des tours, et au sbires d'avancer le long du passage. Chaque sbire est une instance du MovieClip Creep1 qui comprend la santé du sbire, sa vitesse de déplacement et les fonctions qui lui sont utiles (mourir par exemple). Au lieu d'avoir un placement de tours libres j'utilise des slots, qui sont des instance du MovieClip towerSlot. Lors de la construction d'une tour le towerSlot change simplement de frame pour passer à l'image de la tour construite, et l'instance prend pour valeurs de dégats, cadence de tir... celles de la tour construite (suis-je clair ? ).
Ainsi j'ai les classes Creep1.as et towerSlot.as qui sont attachées à ma scène.
Je voudrais désormais faire cibler et tirer mes tours, tous mes creeps sont stockés à la création dans un array creeps. Voici donc comment je m'y prend pour le moment :
towerSlot.as
Pour le moment tout fonctionne, seul pépin de temps en temps la tour tire deux projectiles au lieu d'un, j'ignore pourquoi.
Maintenant la seconde partie du code contenue dans projectile.as
Tien d'extraordinairement compliqué pour la plupart d'entre vous je suppose (moi les maths... )
Le problème qui se pose principalement avec mon script, c'est que bien souvent le projectile n'atteins pas sa cible, en fait mes creeps se déplacent en fonction de leur vitesse d'un waypoint (point de passage) à un autre à un certain angle. Le problème est que le temps que le projectile arrive aux coordonnées du creep, lui à déjà bougé. Il faut donc que je réussisse à compenser son déplacement.
Je viens donc savoir si quelqu'un aurait une idée, comment recalculer la trajectoire de mon projectile pour qu'il prenne en compte le déplacement de mon creep (je veux que 100% des tirs touchent leurs cible).
J'espère avoir réussi à me faire comprendre et ne pas trop m'être embrouillé, je sais bien qu'il y à peu de codeurs AS sur ce forum, mais c'est très proche du javascript et c'est plus du coté logique que j'ai besoin d'un coup de main que du coté développement.
Merci d'avoir pris le temps de me lire
EDIT : Voici ce que ça donne pour le moment : http://www.dreamglobe.fr/dump/td.swf
Et j'ai trouvé pourquoi elles tirent plusieurs projectiles, en fait elles visent tous les ennemis à portée donc je pourrais régler ce problème assez simplement.
Quelques points à prendre en considération : je suis une bille absolue en Maths, et mon code ressemble plus à du bricolage qu'à quelque chose de véritablement structuré =D
Maintenant passons à ce qui me pose soucis
J'entreprend la création d'un jeu flash, un jeu de Tower Defense. Je n'utilise pas une map faite de tile, mais une image et j'utilise actionscript pour gérer le tout.
Pour le moment j'ai réussi à créer ma map, donner la possibilité de créer des tours, et au sbires d'avancer le long du passage. Chaque sbire est une instance du MovieClip Creep1 qui comprend la santé du sbire, sa vitesse de déplacement et les fonctions qui lui sont utiles (mourir par exemple). Au lieu d'avoir un placement de tours libres j'utilise des slots, qui sont des instance du MovieClip towerSlot. Lors de la construction d'une tour le towerSlot change simplement de frame pour passer à l'image de la tour construite, et l'instance prend pour valeurs de dégats, cadence de tir... celles de la tour construite (suis-je clair ? ).
Ainsi j'ai les classes Creep1.as et towerSlot.as qui sont attachées à ma scène.
Je voudrais désormais faire cibler et tirer mes tours, tous mes creeps sont stockés à la création dans un array creeps. Voici donc comment je m'y prend pour le moment :
towerSlot.as
if(fireTimer>=fireRate) { // si le décompte de tir est supérieur à la cadence de tir de la tour
for(var i=0;i<_root.creeps.length;i++){ // je parcour mon array creeps
if(Math.sqrt(Math.pow(_root.creeps[i]._y - this._y, 2) + Math.pow(_root.creeps[i]._x - this._x, 2)) < this.range){ // une formule piquée sur le net pour savoir si le creep est à portée
target = _root.creeps[i];
//j'attache une instance du MC projectile et je défini sa cible
var projectile = _root.attachMovie( "projectile" , "projectile" + _root.getNextHighestDepth() , _root.getNextHighestDepth(), {_x:this._x,_y:this._y} );
projectile.hit = this.dmg;
projectile.targetX = _root.creeps[i]._x;
projectile.targetY = _root.creeps[i]._y;
}
}
fireTimer = 0;
}
Pour le moment tout fonctionne, seul pépin de temps en temps la tour tire deux projectiles au lieu d'un, j'ignore pourquoi.
Maintenant la seconde partie du code contenue dans projectile.as
this.yDist=this.targetY - this._y; //distance entre le projectile et l'ennemi
this.xDist=this.targetX - this._x; //distance entre le projectile et l'ennemi (y)
this.angle=Math.atan2(this.yDist,this.xDist);//l'angle de déplacement, une autre formule piquée sur le net
this.ySpeed=Math.sin(this.angle) * this.speed;//déplacement vertical en fonction de l'angle auquel est l'ennemi
this.xSpeed=Math.cos(this.angle) * this.speed;//déplacement horizontal en fonction de l'angle auquel est l'ennemi
//déplacement du projectile
this._x+= this.xSpeed;
this._y+= this.ySpeed;
for(var i in _root.creeps) { // je parcours mon tableau creeps
if (this.hitTest(_root.creeps[i])){ //si le projectile touche un creep
_root.creeps[i].health-=this.hit; // je réduis sa santé
this.removeMovieClip(); // j'efface le MC du projectile
}
Tien d'extraordinairement compliqué pour la plupart d'entre vous je suppose (moi les maths... )
Le problème qui se pose principalement avec mon script, c'est que bien souvent le projectile n'atteins pas sa cible, en fait mes creeps se déplacent en fonction de leur vitesse d'un waypoint (point de passage) à un autre à un certain angle. Le problème est que le temps que le projectile arrive aux coordonnées du creep, lui à déjà bougé. Il faut donc que je réussisse à compenser son déplacement.
Je viens donc savoir si quelqu'un aurait une idée, comment recalculer la trajectoire de mon projectile pour qu'il prenne en compte le déplacement de mon creep (je veux que 100% des tirs touchent leurs cible).
J'espère avoir réussi à me faire comprendre et ne pas trop m'être embrouillé, je sais bien qu'il y à peu de codeurs AS sur ce forum, mais c'est très proche du javascript et c'est plus du coté logique que j'ai besoin d'un coup de main que du coté développement.
Merci d'avoir pris le temps de me lire
EDIT : Voici ce que ça donne pour le moment : http://www.dreamglobe.fr/dump/td.swf
Et j'ai trouvé pourquoi elles tirent plusieurs projectiles, en fait elles visent tous les ennemis à portée donc je pourrais régler ce problème assez simplement.