Petit pepin dans la création d'un jeu simple

Résolu
danizooska Messages postés 9 Date d'inscription dimanche 1 août 2004 Statut Membre Dernière intervention 26 juin 2006 - 29 déc. 2005 à 00:12
danizooska Messages postés 9 Date d'inscription dimanche 1 août 2004 Statut Membre Dernière intervention 26 juin 2006 - 5 janv. 2006 à 17:16
Bonjour à tous ! Je suis nouveau et j'ai un problème avec un jeu que je veux créer. Le but de ce jeu est d'éviter que des balles rouges (qui rebondissent un peu partout) et que des balles poursuivantes touchent la balle verte qui suis notre souris. Pour les balles poursuivantes, sa va, mais pour les balles rouges, sa va moins bien. Mon problème est que, si j'ai deux balles rouges sur la scène, une dans le centre et l'autre près du mur droit, lorsque la balle près du mur droit touchera ce dernier, sa vitesse en x sera multipliée par -1, mais celle du centre aussi ! Alors toutes les balles bougent pareilles, elles vont toutes à un endroit en même temps et dans la même direction. C'est comme si toutes les balles ensembles en formaient une seule... J'ai alors essayé de mettre une variable de vitesse unique pour chaque balles, mais je ne sais pas si j'ai bien réussi. Voici le code :

//ici on déclare quelques variables//

//pour que chaque balle ait sa propre vitesse, j'ai déclaré un array (j'ai mis la valeur 10 seulement pour tester)
var balle_rouge_vitesse_x = new Array(10);
var balle_rouge_vitesse_y = new Array(10);
var balle_rouge_nombre = 0;
var balle_rouge_rayon = _root.balle_rouge._width/2;
//la variable nombre_balle_total sers pour la profondeur lorsqu'on crée les balles
var nombre_balle_total = 0;

//fonction qui crée les balles rouges//

function creer_balle_rouge() {
balle_rouge_nombre++;
nombre_balle_total++;
this.attachMovie("balle_rouge", "balle_rouge"+"_"+balle_rouge_nombre, nombre_balle_total);
//on place les balles rouges au hasard sur la scène
this["balle_rouge"+"_"+balle_rouge_nombre]._x = random(520)+15;
this["balle_rouge"+"_"+balle_rouge_nombre]._y = random(370)+15;
//ici on règle la vitesse des balles rouges
balle_rouge_vitesse_x[balle_rouge_nombre] = 2;
balle_rouge_vitesse_y[balle_rouge_nombre] = 2;

//toujours dans la fonction, on met le monvement des balles rouges

this["balle_rouge"+"_"+balle_rouge_nombre].onEnterFrame = function() {
if ((this._x-balle_rouge_rayon)<0) {
balle_rouge_vitesse_x[balle_rouge_nombre] *= -1;
}
if ((this._x+balle_rouge_rayon)>550) {
balle_rouge_vitesse_x[balle_rouge_nombre] *= -1;
}
if ((this._y-balle_rouge_rayon)<0) {
balle_rouge_vitesse_y[balle_rouge_nombre] *= -1;
}
if ((this._y+balle_rouge_rayon)>400) {
balle_rouge_vitesse_y[balle_rouge_nombre] *= -1;
}
this._x += balle_rouge_vitesse_x[balle_rouge_nombre];
this._y += balle_rouge_vitesse_y[balle_rouge_nombre];
};

Voilà ! J'espère que vous pourrez m'aider à résoudre mon problème.

Merci d'avance !

11 réponses

cs_goldenboy68 Messages postés 1596 Date d'inscription samedi 3 janvier 2004 Statut Membre Dernière intervention 9 juin 2011 2
29 déc. 2005 à 04:37
à chaque fois je fais la bourde quand je donne l'exemple! :)



this["balle_rouge"+"_"+balle_rouge_nombre].varNombre=balle_rouge_nombre;

this["balle_rouge"+"_"+balle_rouge_nombre].onEnterFrame = function() {

if ((this._x-balle_rouge_rayon)<0) {

balle_rouge_vitesse_x[this.varNombre] *= -1;

}





Là, ça devrait être mieux! Dsl!



@+! Samy
3
cs_bali_balo Messages postés 1378 Date d'inscription samedi 9 octobre 2004 Statut Membre Dernière intervention 1 novembre 2010 1
29 déc. 2005 à 00:59
Surement des problèmes de cibles...
exemple:

this["balle_rouge"+"_"+balle_rouge_nombre].onEnterFrame = function() {
if ((this._x-balle_rouge_rayon)<0) {
balle_rouge_vitesse_x[balle_rouge_nombre] *= -1;
}

balle_rouge_rayon est déclaré sur la scène principale je crois...
Alors que là, tu l'utilise comme si elle était déclaré dans une occurence d'une balle rouge...
de même pour balle_rouge_nombre

problèmes de cibles, problèmes de cibles, problèmes de cibles

bali_balo...
=]
c'est noël...
0
cs_goldenboy68 Messages postés 1596 Date d'inscription samedi 3 janvier 2004 Statut Membre Dernière intervention 9 juin 2011 2
29 déc. 2005 à 03:31
Le problème c'est ton "onEnterFrame"...tu crées tes balles dynamiquement en utilisant:

this["balle_rouge"+"_"+balle_rouge_nombre].onEnterFrame = function() {



à l'intérieur du onEnterFrame tu utilises encore "balle_rouge_nombre",
or celui-ci est incrémenté à chaque boucle...donc du coup toutes les
balles créées vont avoir le même comportement que la dernière!



Solution:

this["balle_rouge"+"_"+balle_rouge_nombre].onEnterFrame = function() {

this.varNombre=balle_rouge_nombre;

if ((this._x-balle_rouge_rayon)<0) {

balle_rouge_vitesse_x[this.varNombre] *= -1;

}

...

je t'ai fait un p'tit bout...faut que tu te fasses la main! :)



Sinon, une p'tite remarque en passant: évite la succession de "IF"...préfère IF...ELSE IF



@+! Samy
0
danizooska Messages postés 9 Date d'inscription dimanche 1 août 2004 Statut Membre Dernière intervention 26 juin 2006
29 déc. 2005 à 04:14
bali, je ne crois pas que ce soit un problème de cible.
balle_rouge_nombre est déclaré sur la scène principale et je l'utilise
sur la scène principale.



goldenboy, en remplaçant balle_rouge_nombre par this.varNombre, sa
revient à la même chose, tu ne fais que changer le nom de la variable,
sa ne règle pas le problème. J'ai remplacé tous les
balle_rouge_nombre par this.varNombre dans les [ ].



Si vous avez d'autres sugestions...
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
danizooska Messages postés 9 Date d'inscription dimanche 1 août 2004 Statut Membre Dernière intervention 26 juin 2006
29 déc. 2005 à 05:18
Ouais ! Merci beaucoup !
0
cs_bali_balo Messages postés 1378 Date d'inscription samedi 9 octobre 2004 Statut Membre Dernière intervention 1 novembre 2010 1
29 déc. 2005 à 12:12
>>>à l'intérieur du onEnterFrame tu utilises encore "balle_rouge_nombre", or celui-ci est incrémenté à chaque boucle...donc du coup toutes les balles créées vont avoir le même comportement que la dernière!

Jle savais que c'était ça!!!
zut, jle voyé mé g laissé tonB, il était "00:59:20" et jaV trop mal à la dent...

bali_balo....=@
0
danizooska Messages postés 9 Date d'inscription dimanche 1 août 2004 Statut Membre Dernière intervention 26 juin 2006
2 janv. 2006 à 04:28
Merci pour ces réponses, mais maintenant j'ai de nouvaux problèmes !



Je voudrais maintenant faire en sorte qu'une balle rouge apparaisse
toute les x secondes. J'essaye depuis quelques temps avec ceci :
setInterval(creer_balle_rouge(), 1000);



Seulement, je ne sais pas où la mettre. Si je la met dans un movie clip
et en onEnterFrame, mon animation est en 30 images/sec alors j'obtien
30 nouvelles balles à la seconde, pas facile de faire des gros
scores...



Sinon, j'ai essayer de la mettre sur la première frame de mon jeu car
il est executé qu'une seule fois, donc j'obtient juste 1 balle, mais à
la fin de la fonction creer_balle_rouge, j'ai mis un
setInterval(creer_balle_rouge(), 1000), croyant que sa fonctionnerait
enfin, mais j'obtient ce joli message d'erreur :



256 niveau(x) de récursion ont été dépassés dans une liste d'actions.

Il s'agit probablement d'une boucle infinie.

L'exécution d'actions a été désactivée dans cette animation.



Si quelqu'un pourrait m'aider, ça serait très gentil !
0
cs_goldenboy68 Messages postés 1596 Date d'inscription samedi 3 janvier 2004 Statut Membre Dernière intervention 9 juin 2011 2
2 janv. 2006 à 08:59
Le "setInterval" n'aime pas trop les "this" utilisé comme tu le fais, le plus simple, c'est de faire:



setInterval(funciton(){

//ici tu mets le code de ta fonction en changeant
les "this" par des "_root" (c'est pas conseillé, mais ça marche!)

},1000);



Sinon, tu peux utiliser le setInterval différemment...mais ça me prend souvent la tête! lol (setInterval(this,taFonction,1000))



@+! Samy
0
danizooska Messages postés 9 Date d'inscription dimanche 1 août 2004 Statut Membre Dernière intervention 26 juin 2006
3 janv. 2006 à 01:28
Merci ça fonctionne, mais un autre problème est apparu en faisant cela
et j'ignore pourquoi et comment le règler. Le problème est lorsque je
veux supprimer toutes ces balles rouges. Avant de mettre un
setInterval, j'utilisais ce code :



//pour supprimer les balles rouges

function supprimer_balle_rouge() {

for (i= 0; i<=balle_rouge_nombre; i++) {

this["balle_rouge"+"_"+i].removeMovieClip();

balle_rouge_nombre = 0;

}



Donc si je remplace tous mes this par _root comme tu as dit pour la fonction creer_balle_rouge, j'obtient ce code :



//fonction qui crée les balles rouges

creer_balle_rouge = setInterval(function () {

balle_rouge_nombre++;

nombre_balle_total++;

_root.attachMovie("balle_rouge", "balle_rouge"+"_"+balle_rouge_nombre, nombre_balle_total);

_root["balle_rouge"+"_"+balle_rouge_nombre]._x = random(520)+15;

_root["balle_rouge"+"_"+balle_rouge_nombre]._y = random(370)+15;

balle_rouge_vitesse_x[balle_rouge_nombre] = 2;

balle_rouge_vitesse_y[balle_rouge_nombre] = 2;

// MOUVEMENT des balles rouges

_root ["balle_rouge"+"_"+balle_rouge_nombre].varNombre = balle_rouge_nombre;

_root["balle_rouge"+"_"+balle_rouge_nombre].onEnterFrame = function() {

if ((this._x-balle_rouge_rayon)<0) {

balle_rouge_vitesse_x[this.varNombre] *= -1;

}

if ((this._x+balle_rouge_rayon)>550) {

balle_rouge_vitesse_x[this.varNombre] *= -1;

}

if ((this._y-balle_rouge_rayon)<0) {

balle_rouge_vitesse_y[this.varNombre] *= -1;

}

if ((this._y+balle_rouge_rayon)>400) {

balle_rouge_vitesse_y[this.varNombre] *= -1;

}

this._x += balle_rouge_vitesse_x[this.varNombre];

this._y += balle_rouge_vitesse_y[this.varNombre];

// Si une balle rouge touche la balle verte

if (this.hitTest(_root.balle_verte)) {

game_over();

}

};

}, 1000);



Par conséquent, j'ai modifier le code pour supprimer les balles rouges :



//pour supprimer les balles rouges

function supprimer_balle_rouge() {

clearInterval(creer_balle_rouge);

for (i =0; i<= balle_rouge_nombre; i++) {

_root ["balle_rouge"+"_"+i].removeMovieClip();

balle_rouge_nombre = 0;

}

}



Mais ça ne fonctionne pas...
0
danizooska Messages postés 9 Date d'inscription dimanche 1 août 2004 Statut Membre Dernière intervention 26 juin 2006
3 janv. 2006 à 01:31
Désolé pour le double-post mais j'ai oublier de préciser qu'en fait les
balles arrêtent de se créer grâce au clearInterval de la fonction
supprimer_balle_rouge mais elle restent en mouvement sans se
supprimer...
0
danizooska Messages postés 9 Date d'inscription dimanche 1 août 2004 Statut Membre Dernière intervention 26 juin 2006
5 janv. 2006 à 17:16
personne
0
Rejoignez-nous