begin process at 2012 05 27 18:31:16
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Archive Flash

 > 

Archives

 > 

ActionScript

 > 

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


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

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

jeudi 29 décembre 2005 à 00:12:59 | Petit pepin dans la création d'un jeu simple

danizooska

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 !
jeudi 29 décembre 2005 à 00:59:20 | Re : Petit pepin dans la création d'un jeu simple

bali_balo

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...
jeudi 29 décembre 2005 à 03:31:52 | Re : Petit pepin dans la création d'un jeu simple

goldenboy68

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

jeudi 29 décembre 2005 à 04:14:57 | Re : Petit pepin dans la création d'un jeu simple

danizooska

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...
jeudi 29 décembre 2005 à 04:37:21 | Re : Petit pepin dans la création d'un jeu simple

goldenboy68

Réponse acceptée !
à 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

jeudi 29 décembre 2005 à 05:18:17 | Re : Petit pepin dans la création d'un jeu simple

danizooska

Ouais ! Merci beaucoup !
jeudi 29 décembre 2005 à 12:12:12 | Re : Petit pepin dans la création d'un jeu simple

bali_balo

>>>à 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....=@
lundi 2 janvier 2006 à 04:28:34 | Re : Petit pepin dans la création d'un jeu simple

danizooska

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 !

lundi 2 janvier 2006 à 08:59:03 | Re : Petit pepin dans la création d'un jeu simple

goldenboy68

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

mardi 3 janvier 2006 à 01:28:59 | Re : Petit pepin dans la création d'un jeu simple

danizooska

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


1 2

Cette discussion est classée dans : nombre, rouge, vitesse, balle, balles


Répondre à ce message

Sujets en rapport avec ce message

Balles rebondissantes [ par yacadi ] Slt @ tous, j'ai un script simple pour faire rebondir une balle : stop(); var vitesse = 4; var elasticite = 15; var gravite = 10; _root.balle.elastic Boucle aléatoire sous AS2 [ par narchotik ] Bonsoir tout le monde,Le titre est totalement erroné mais je ne sais pas comment traduire mon problème!  Je planche actuellement sur un Probleme de syntaxte dans un duplicatemovieclip [ par narchotik ] Bonjour tout le monde,Suite à un ancien post où je n'ai pas eu de réponse, j'ai modifié mon intention et toujours un léger hic.j'ai 30 balles qui part Probleme avec le hitTest [ par lounnaci ] Voila je suis entrain de réaliser un jeu du style "shoot em up", plusieurs clip qui ce balade alléatoirement que j'ai nommés (cible0,cible1,cible2,... Balles Rebondissantes [ par kail85 ] Bonjour tout le monde !J'aimerais reproduire plus ou moins cet effet. J'ai à peu près réussi à le faire avec une seule balle, mais ce n'est pas encore [Jeu Flash] Eviter la touche enfoncée [ par JonFever ] Hello ! Je suis nouveau sur Flashkod car je m'intéresse depuis peu à l'Action Script. En effet, j'effectue des tests simples (faire marcher un personn collision en flash AS3 [ par monkey05 ] Bonjour à tous,Je suis en train de faire mon ppe (projet pluriculturel encadré).Mon projet consiste à concevoir un compteur de vitesse sur un kart.Je flash annimation complex [ par nbpro ] bonjour' ,voici, je voudré de l' aide pour se problemedonc c asser compliquer a expliquerdans la scenne principale il y a un clip , ce clip "annime" f Déposer un impact de balle [ par wolfmike ] Salut à tous,Tout d'abord désolé pour le titre.... mais bon... je suis en train de découvrir l'Action script et donc je me suis dis: On va essayer un À propos de la classe Vector [ par inaden ] Bonjour,question de cours...Je viens de découvrir qu'il existe une classe Vector, d'après ce qui est dit, plus optimiser que la classe Array, mais plu


Nos sponsors


Sondage...

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

Photothèque

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,702 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales