Seydjinn
Messages postés9Date d'inscriptionvendredi 26 octobre 2007StatutMembreDernière intervention11 février 2008
-
10 janv. 2008 à 17:02
Seydjinn
Messages postés9Date d'inscriptionvendredi 26 octobre 2007StatutMembreDernière intervention11 février 2008
-
25 janv. 2008 à 10:34
Bonjour,
J'ai un soucis je travaille sur un petit jeu où des ennemis doivent se déplacer aléatoirement. Ils avancent font une pause plus ou moins longue, puis avance dans une autre direction, refont une pause et ainsi de suite indéfiniment. J'ai trouvé sur le site un code approchant où un objet avait se comportement.
Malheureusement j'ai deux problemes : Le code que j'ai trouvé est intégré dans son clip et non dans sa frame et je n'arrive pas a l'appliquer à plusieurs objets.
for (j=1; j<=8; j++){
rebours = Math.floor (Math.random ()*32)+24;
direction = Math.floor (Math.random ()*360);
elan = Math.floor (Math.random ()*5)+10;
_rotation = (direction/Math.PI)*180;
}
}
_x = _x+(Math.cos (direction)*elan);
_y = _y+(Math.sin (direction)*elan);
if (elan>0) {
elan = elan-1;
}
}
la variable rebours est déclarer à 30 dans ma frame précédente (c'ets le seul code qu'on y trouve).
Clip est le nom de mon image.
Le résultat fait que mes 8 clips apparaissent bien mais ils ne se déplacent pas, ils disparaissent au bout d'un moment et respawn ailleurs (la plus part du temps hors de l'écran).
Sauriez-vous me dire comment je dois procéder ? J'avoue être une grande débutante en flash d'où mon probleme...
cs_inaden
Messages postés618Date d'inscriptionmercredi 4 avril 2007StatutMembreDernière intervention27 août 20102 11 janv. 2008 à 16:09
Bonjour,
C'est quoi ta fonction randomization.
Sinon, de mon côté, j'ai essayé ton code et je n'ai qu'un bonhomme qui apparaît, c'est donc que la dite fonction, ou bien est absente de ton code ou bien ne fonctionne pas, mais le problème doit se balader la dedans
Seydjinn
Messages postés9Date d'inscriptionvendredi 26 octobre 2007StatutMembreDernière intervention11 février 2008 11 janv. 2008 à 18:56
Argh milles excuses ! j'avasi oublié cette partie de mon code qui se trouve dans ma premiere frame ! :/ Il s'agit de la fonction de random de nombre classique telle qu'on la trouve dans l'aide de flash.
Si tu n'as vu qu'un objet c'est surement parce qu'ils étaient tous superposés du coup. :/
Désolée d'avoir oublié ça :/ voilà la fonction en question qui est placé dans la premiere frame :
function randomization(min:Number, max:Number):Number
{
var randomY:Number = Math.floor(Math.random() * (max - min + 1)) + min;
return randomY;
};
cs_inaden
Messages postés618Date d'inscriptionmercredi 4 avril 2007StatutMembreDernière intervention27 août 20102 12 janv. 2008 à 10:10
Salut
Bon, ça n'est pas la panassé mais au moins ça bouge de façon à peu près aléatoire.
Je t'invite fortement, quand tu as un problème à utiliser les action trace pour voir où le bas blesse. Bref, voici un début de code qu'il reste à améliorer.
Seydjinn
Messages postés9Date d'inscriptionvendredi 26 octobre 2007StatutMembreDernière intervention11 février 2008 14 janv. 2008 à 10:07
Merci beaucoup Inaden !! :)
Je vais regarder ça de suite, j'avais essayé d'utiliser trace mais je ne comprenais plus rien je t'avoue, je m'embrouillais trop. Merci encore pour ton aide ! :)
Vous n’avez pas trouvé la réponse que vous recherchez ?
Seydjinn
Messages postés9Date d'inscriptionvendredi 26 octobre 2007StatutMembreDernière intervention11 février 2008 18 janv. 2008 à 11:17
Je me permet de relancer le sujet car j'ai un nouveau probleme maintenant. ^^
Grace à ton code Inaden j'ai réussi à coder le déplacement aléatoire comme je le souhaitais. Voici le code en question :
Dans la premiere Frame :
//Function pour randomer un nombre aléatoirement :
function randomization(min:Number, max:Number):Number
{
var randomY:Number = Math.floor(Math.random() * (max - min + 1)) + min;
return randomY;
};
//déclaration de la variable rebours qui prend une valeur différente pr chaque ennemi.
function spawn(){
for (j=1; j<=8; j++){
this.attachMovie ("clip", "clip"+j, 100*j);
this["clip"+j]._x = randomization(100,800)
this["clip"+j]._y = randomization(100,650)
}
}
Dans la seconde frame :
stop()
spawn (); //Appel de la fonction qui crée les ennemis
_root.onEnterFrame = function (){
for(i=1;i<=8;i++){//effectue le code de mouvement pour chaque ennemi séparément
_root["rebours"+i]= _root["rebours"+i]-1;//décompte du compte à rebours
if (_root["rebours"+i] == 0){//qd le compte a rebours est a zero on lance le mouvement du clip.
_root["rebours"+i]= randomization (20,60);
_root["direction"+i] = Math.floor (Math.random ()*360);
_root["clip"+i]._rotation = (_root["direction"+i]/Math.PI)*180;
_root["elan"+i]= Math.floor (Math.random()*5)+15;
}
if (_root["elan"+i]>0) {
_root["elan"+i] = _root["elan"+i]-1;
}//fin du code de mouvement du clip
}
}
Ce code là marche parfaitement (si vous voulez tester créez juste un movieclip appelé clip). Je souhaite maintenant rajouter deux choses à mon code :
- Empecher mes clips de sortir du cadre de mon décor
ça j'ai réussi, j'utilise deux fonctions, l'une crée le décor et l'autre est un hittest entre mes ennemis et mon décor.
- Empecher mes ennemis de se chevaucher. C'est là ou le bas blesse.
Comme je crée et nomme mes ennemis dynamiquement, ils ont tous le même nom "clip"+i. Le probleme c'est que mon code est dans une boucle du coup je ne sais pas comment faire pour réaliser un hittest entre "clip"+i ou i =1 par exemple et "clip"+i ou i = 2... Je ne sais pas si je suis trés claire dites le moi si vous avez besoin de précisions.
cs_inaden
Messages postés618Date d'inscriptionmercredi 4 avril 2007StatutMembreDernière intervention27 août 20102 18 janv. 2008 à 14:13
Salut,
Avec l'animation, ou tout du moins l'ensemble du code (test de sortie de scène compris...) ce serait plus facile pour voir comment faire. Et puis la fonction spawn... c'est quoi ?
Seydjinn
Messages postés9Date d'inscriptionvendredi 26 octobre 2007StatutMembreDernière intervention11 février 2008 21 janv. 2008 à 10:18
La fonction spawn est initialisée dans la premiere frame c'est la fonction qui crée les clips. Je vais remettre tout mon code actuel que j'ai mis a l'heure actuel dans trois frames.
La première :
//Function pour randomer un nombre aléatoirement :
function randomization(min:Number, max:Number):Number
{
var randomY:Number = Math.floor(Math.random() * (max - min + 1)) + min;
return randomY;
};
//déclaration de la variable rebours qui prend une valeur différente pr chaque ennemi.
// Déclaration de la fonction de collision avec le décor empêchant les ennemis de sortir.
function collisiondecor() {
for (j=1; j<=8; j++)
{
if (eval("ENNEMI"+j).hitTest(TOP))
{
_root["ENNEMI"+j]._y += 30;
}
if (eval("ENNEMI"+j).hitTest(DOWN))
{
_root["ENNEMI"+j]._y -= 30;
}
if (eval("ENNEMI"+j).hitTest(RIGHT))
{
_root["ENNEMI"+j]._x -= 30;
}
if (eval("ENNEMI"+j).hitTest(LEFT))
{
_root["ENNEMI"+j]._x += 30;
}
}
};
// Déclaration de la fonction permettant de tester les collisions entre ennemis & ennemis. Mais ce code là ne marche pas :(
function collision_ennemiennemi() {
for(i=1;i<=8;i++){
for(a=1;a<=8;a++){
if(this["clip"+i].hitTest(this["clip"+a])){
//On regarde que les 2 clips n'aient pas le même numéro
if(this["clip"+i].numero!=this["clip"+a].numero){
//Si c'est le cas 2 clips différent se touchent.
trace("touch");
}
}
}
}
}
Ca code là (le dernier mis) ne marche pas c'ets celui qui me pose probleme le code de collision entre deux ennemis.
et Enfin le code de la troisième frame :
stop()
spawn_borddemap()
spawn ();//fonction qui crée les 8 ennemis.
_root.onEnterFrame = function (){
collisiondecor()
collision_ennemiennemi()
for(i=1;i<=8;i++){//cette boucle permet d'éxecuter les commandes de déplacement et de rebours pour chaque ennemi séparément
_root["rebours"+i]= _root["rebours"+i]-1;//ça c'est le décompte du compte à rebours de l'ennemi numéro i...
if (_root["rebours"+i] == 0){//...qd ce compte à rebours arrive à zero on lance le mouvement de l'ennemi numéro i
_root["rebours"+i]= randomization (20,60);//ça c'est pour réinitialiser le compte à rebours de l'ennemi i
_root["direction"+i] = Math.floor (Math.random ()*360);//ça c'est pr définir la direction dela rotation
_root["ENNEMI"+i]._rotation = (_root["direction"+i]/Math.PI)*180;//ça c'est la fonction de rotation
_root["elan"+i]= Math.floor (Math.random()*5)+15; // ça c'est la fonction qui donne le mouvement du personnage
}
_root["ENNEMI"+i]._x = _root["ENNEMI"+i]._x+(Math.cos (_root["direction"+i])*_root["elan"+i]);
//ça c'est la fonction qui donne le sens du mouvement sur x
_root["ENNEMI"+i]._y = _root["ENNEMI"+i]._y+(Math.sin (_root["direction"+i])*_root["elan"+i]);
if (_root["elan"+i]>0) {
_root["elan"+i] = _root["elan"+i]-1;
}
}
}
Voilà maintenant tu as le code complet. Les décors qui sont appelés par la fonction spawn_borddemap sont tout simplement des traits qui font le bords de l'écran. JE n'arrive pas à faire fonctionner la dernière fonction de la frame deux la collision ennemis/ennemis. Est-ce que tu saurais voir où réside mon erreur ? Je ne parviens pas à comprendre. :/
cs_inaden
Messages postés618Date d'inscriptionmercredi 4 avril 2007StatutMembreDernière intervention27 août 20102 21 janv. 2008 à 18:56
Salut,
désolé mais quand j'édite ton animation (avec ton code) les bonshommes ne se déplacent pas.
Avec l'animation (une version basique) ce serait sûrement plus simple. Désolé.
J'avais modifié le nom du clip
entre mes deux versions et je l'avais complétement oublié qd j'ai posté mon
deuxieme post... Désolée encore :/
Merci de ta patience Inaden. :)
cs_inaden
Messages postés618Date d'inscriptionmercredi 4 avril 2007StatutMembreDernière intervention27 août 20102 22 janv. 2008 à 08:16
Salut,
Bon, c'est pas encore ça mais au moins il se passe quelque chose. J'ai changer un peu ta fonction de colision. Plusieurs problèmes :
Il ne se passe pas vraiment quelque chose de probant
La fonction prend le pas sur celle de la scène.
function collision_ennemiennemi() {
//trace("TEST DE COLISION");
for(i=1;i<=8;i++){
for(a=1;a<=8;a++){
if(_root["ENNEMI"+i].hitTest(_root["ENNEMI"+a])){
//trace(" ---> Test de contact");
//On regarde que les 2 clips n'aient pas le même numéro
cs_inaden
Messages postés618Date d'inscriptionmercredi 4 avril 2007StatutMembreDernière intervention27 août 20102 22 janv. 2008 à 08:18
Ah oui. Tu peux mettre tout ton code sur une seule image clé. Le tout est de ranger un peu ce qui est fonction, appel de fonction et création de variable et d'élément.