Forums Développement Multimédia

Aller au contenu

[AS2] De l'occurence 1 à la 50 ?

CODE

12 réponses à ce sujet

#1 Weedy Wonka

    Ceinture Blanche

  • Members
  • Pip
  • 7 messages

Posté 12 January 2015 - 08:20 AM

Bonjour,

Alors voilà j'ai créé dynamiquement 25 cases (en AS2) et leur ais attribué une position et surtout chacune une occurrence allant de case1 à case25.

Je cherche maintenant un moyens de dire en quelque sorte "de la case1 à la case10"
Par exemple : if((case1"a la"case10)._x=10) {;}
ce qui remplacerais : if (case1._x=10){;};if (case2._x=10){;};if (case3._x=10){;};... etc jusqu'à 10

Pour pouvoir checker plusieurs cases (voir toute) en même temps sans devoir les écrire une par une dans le code (case1,case2....car dans mon projet final ce sera des centaines de cases)

J'imagine que cela peut être fait en AS2 ? J'ai cherché sur le net mais ayant du mal a mettre le doigt sur la description exacte de ce que je veux faire, je ne trouve pas.

Merci !

#2 Jano 95

  • Moderateur
  • PipPipPipPipPipPipPipPip
  • 4558 messages

Posté 12 January 2015 - 11:50 AM

Salut.

Plutôt que de chercher avec des if, regarde du coté de switch et case.

Petit exemple de démo.


a = Math.floor(Math.random()*30)+1;
trace(a)
switch (true) {
case (a<10) :
trace("0 à 9");
break;

case (a>=10 && a<20):
trace("10 à 19")
break;

case (a>=20 && a<30):
trace("20 à 29");
break;

case (a>=30):
trace("30 et plus");
break;
}
 


#3 Weedy Wonka

    Ceinture Blanche

  • Members
  • Pip
  • 7 messages

Posté 12 January 2015 - 11:57 AM

Salut, merci mais dans ton exemple "a" est une variable alors que moi ce serais plutôt des occurrences de clip, déjà attribuées "a1." "a2." "a3."... et je voudrais pouvoir dire : "si un des 10 clips "a" (ou 100 par exemple) est positionné ici, trace("ok")"

#4 Jano 95

  • Moderateur
  • PipPipPipPipPipPipPipPip
  • 4558 messages

Posté 12 January 2015 - 14:09 PM

Alors un truc comme ça


for (i=1 ; i<30; i++) {
if (this["a"+i]._x == 10) {
  trace (i+ " - OK");
};
};
 


#5 Monsieur Spi

  • Community Manager
  • PipPipPipPipPipPipPipPip
  • 6954 messages

Posté 12 January 2015 - 15:25 PM

Hello,

Bienvenue Weedy et coucou Jano ;)

Pour aider un peu, les tableaux pourraient être la solution.
Créer un tableau pour stocker tes "cases", puis parcourir le tableau à l'aide de boucles pour agir sur les éléments qu'il contient.
Pour chaque boucle tu peux préciser l'indice de départ et celui d'arrivée dans le tableau, ceci te permettant de manipuler les objets en série.

#6 Weedy Wonka

    Ceinture Blanche

  • Members
  • Pip
  • 7 messages

Posté 13 January 2015 - 06:50 AM

Merci Jano, c'est exactement ça que je cherchais il me semble, je vais creuser de ce coté là en tout cas !

Merci monsieur Spi, j'avais pensé aux array pour ce projet d'ailleurs, mais comme ce n'est pas quelque chose que je maîtrise je perdais pas mal de temps et comme j'ai un délais a respecter j'ais décidé de le faire à ma façon ^^'

#7 Weedy Wonka

    Ceinture Blanche

  • Members
  • Pip
  • 7 messages

Posté 13 January 2015 - 08:01 AM

Encore merci jano, c'est parfait pour checker chaque occurence de a entre a1 et a30 !

Et du coup j'ai pu voir que je pouvais écrire this["crate"+5]. par exemple à la place de crate5.

Je voudrais savoir si il existe quelque chose du genre this["crate"+anything]. en gros pour checker si il y a une crate a un endroit donné sans pour autant avoir besoins de savoir la quelle, et du coup sans avoir besoins de checker les 30, du moment que l'occurence commence par "crate" ça renvois true peut importe le chiffre qui suit ?

Merci

#8 Monsieur Spi

  • Community Manager
  • PipPipPipPipPipPipPipPip
  • 6954 messages

Posté 13 January 2015 - 14:09 PM

Salut,

Pour compléter ce que dit Jano, et te guider vers les tableaux, essayes les codes suivants (pas testé en AS2) :


// créer un tableau
var stock = [];

// boucle pour remplir le tableau
for(i=0; i<50; i++){
stock.push(this["crate"+i]);
}

// boucle pour interroger le tableau
for(i=0; i<50; i++){
stock[i]._x = i*20;
}
 


#9 Weedy Wonka

    Ceinture Blanche

  • Members
  • Pip
  • 7 messages

Posté 13 January 2015 - 14:46 PM

C'est sympas spi mais n'ayant aucune notion de tableau, ça ne m'aide pas énormément, même si du coup ça me tente d'aller combler ces lacunes, le soucis c'est le temps, du moins mon délais.

En fait je doit coder un jeu de type "mahjong connect" comme celuis ci par exemple : http://www.mahjong-c...ng-connect.html

Je vois que tu as pas mal de tutos en signature, lequel s'approcherais le plus des notions qu'il me faudrais en array pour coder ce jeu ?
(le soucis c'est qu'il faudrait que je me mette à l'as3 pour tes tutos j'imagine ^^' ça fait beaucoup de chose à assimiler pour terminer le jeu dans les temps)

#10 Monsieur Spi

  • Community Manager
  • PipPipPipPipPipPipPipPip
  • 6954 messages

Posté 13 January 2015 - 15:12 PM

Citation

n'ayant aucune notion de tableau, ça ne m'aide pas énormément

As-tu au moins testé les codes que je t'ai donné ?

C'est pas dur de comprendre ce que c'est qu'un tableau, que ce soit en AS2 ou AS3.
Un tableau est un objet qui permet de ranger d'autres objets, il est composé de "cellules" appelées "index".

Création d'un tableau :

var monTaleau = [];

Interrogation d'un tableau :

var maValeur = monTableau[index];

Boucler sur tous les éléments d'un tableau :


for(i=0; i<monTableau.length; i++){
element = monTableau[i];
}
 


Insérer un élément dans un tableau :

monTableau.push(element);

Voilà pour la base, pas bien compliqué, si tu veux aller plus loin voir : http://forums.mediab...alites/tableaux

Ensuite, pour revenir à ton problème, tu as X éléments créés je suppose à la main (timeline) sur la scène, c'est un mauvais départ car pour le type de jeu que tu veux monter ce n'est pas recommandé, pour t'éviter de galérer et te mettre sur la bonne voie, je recommande de passer par des tableaux (ce que tu aurais du faire tout de suite en utilisant des objets dynamiques, placés via le code).

Apprendre l'utilisation des tableaux ne sera pas une perte de temps, au contraire, cela va t'éviter de te prendre la tête en continuant à la manière que tu utilise actuellement, qui risque fort d'être un casse tête...

Donc, ce dont tu as besoin c'est de placer tous tes objets quelque part afin de les manipuler facilement et d'éviter des écritures du genre : this["crate"+1] qui est une source d'erreurs et pas top niveau performances. La solution, c'est un tableau, je commence donc par créer mon tableau :

var monTableau = [];

Puis je dois y ranger tous mes objets (attention les tableaux commencent toujours à l'index 0) :


var nombreObjets = 50;
for(i=0;i<nombreObjets; i++){
        monTableau.push(this["crate"+i]);
}

Ok à présent tous mes objets sont référencés à un endroit, le tableau, je peux parcourir facilement ce tableau pour manipuler les objets qu'il contient :



var indexDepart = 0;
var indexArrive = monTableau.length;

for(i=indexDepart; i<indexArrivee; i++){
        var objet= monTableau[i];
        objet._x = 10;
        objet._y = 50*i;
}
 


Et voilà, c'est tout, à présent tu peux atteindre n'importe quel objet référencé dans le tableau et agir dessus sans avoir besoin de 1000 lignes de code ou de connaître son nom, tout ce dont tu as besoin c'est l'index où se trouve l'objet dans le tableau.

Il existe de nombreuses méthodes pour manipuler les tableaux, tu en saura plus ici : http://forums.mediab...alites/tableaux

Citation

Je vois que tu as pas mal de tutos en signature, lequel s'approcherais le plus des notions qu'il me faudrais en array pour coder ce jeu ?

Taquin
Bejeweled
Cascade

Je recommande de commencer par Taquin, par contre les tutos sont écrits pour AS3.

Bon courage.

#11 Monsieur Spi

  • Community Manager
  • PipPipPipPipPipPipPipPip
  • 6954 messages

Posté 13 January 2015 - 15:17 PM

Petite correction de ma part.

Citation

j'ai créé dynamiquement 25 cases (en AS2)

Ok, donc pas à la main, dans ce cas c'est encore plus simple, range tes objets dans ton tableau au moment où tu les crée et passe par le tableau pour les retrouver plutôt que par leur nom, il te suffit d'ajouter cette ligne au moment où tu crée ton objet (que je nomme arbitrairement "monObjet" ici) :

monTableau.push(monObjet);


#12 Weedy Wonka

    Ceinture Blanche

  • Members
  • Pip
  • 7 messages

Posté 15 January 2015 - 15:29 PM

Merci, du coup je m'y met aux array mais en faisant un compromis et en restant sur l'as2 (faute de temps, il faut que je puisse me reposer sur quelque chose, mais je m'y mettrais un jours à l'as3 promis ^^')

Donc je viens de créer un tableau de 25 cases de cette façon :
(c'est un petit exercice que je me suis donné, un mahjong-connect simplifié)


monTableau = [];
maValeur = monTableau[index];
nombreObjets = 25;
indexDepart = 0;
indexArrive = monTableau.length;
ligne = 1;
compteLignes = 0;

for(i=0;i<nombreObjets; i++){
monTableau.push("caze"+i);
spawn = attachMovie('caze',monTableau[i],i);
compteLignes+=1
if(compteLignes==6){ligne+=1,compteLignes=1;}
spawn._x = (50*(i+1))-(250*(ligne-1)); spawn._y = 50*ligne;
numHasard = Math.round(Math.random()*8+1)
spawn.nbr.text = numHasard;
}
 

Ce qui donne ça : Image IPB

Donc là j'ai fait un tableau de 25 occurences puis les ais distribué aux clips en les faisant apparaitre...

MON SOUCIS : J'arrive plus ou moins à manipuler des tableaux maintenant et faire en sorte de faire correspondre leurs données a des éléments dans la scène. Ce que je ne comprend pas c'est le lien dans l'autre sens, comment les actions, les clicks sur un clip du joueurs interagissent avec le tableau ?

Car là la première chose qui me viendrais à l'idée serais de récupérer l'occurence de la case au click dessus puis de chercher cette occurence dans le tableau, pour me renvoyer l'index et pouvoir la manipuler.

Mais j'imagine que ce n'est PAS DU TOUT ce qu'il faut faire ^^ autrement l'utilisation du tableau perd toute son utilité :s
Du coup comment faire ?

J'en profite pour parler de la suite, en fait voilà le but : si on click sur deux chiffre identiques et que les cases peuvent être relié en suivant ces règles :
Image IPB

Les deux cases disparaissent, le but étant de faire le + de paires dans le temps impartis

Je me demandé si avec les tableaux il y à un moyen simple de checker ces chemins, ou si il faut creuser du coté du pathfinding A* etc... ? même si ça me semble un peu complexe pour ce cas...
(pour ce point je ferais peut-être un autre sujet, car le titre ne colle pas vraiment)

Merci beaucoup pour vôtre aide, j'ai pourtant réalisé pas mal de jeux, platforme, combat avec ai, shooter, shmup etc... tout en prenant le soin de laisser les tableaux de coté jusqu'à présent et j'avoue que j'ai du mal à me faire à cette logique.

#13 Monsieur Spi

  • Community Manager
  • PipPipPipPipPipPipPipPip
  • 6954 messages

Posté 15 January 2015 - 18:54 PM

Salut,

Correction de ton code :

monTableau = []; // ok
// maValeur = monTableau[index]; // ne sert à rien car le tableau est vide
nombreObjets = 25; // ok
//indexDepart = 0; // ne sert à rien
//indexArrive = monTableau.length; // ne sert à rien car le tableau est vide
ligne = 1;
compteLignes = 0;

for (i = 0; i < nombreObjets; i++)
{
        spawn = attachMovie('caze', "caze"+i, i); // créer l'objet
        monTableau.push(spawn); // puis le placer dans le tableau
       
        compteLignes++; // incrémentation directe
        if (compteLignes == 6)
        {
                ligne++; // incrémentation directe
                compteLignes = 1;
        }
        spawn._x = (50 * (i + 1)) - (250 * (ligne - 1));
        spawn._y = 50 * ligne;
        numHasard = Math.round(Math.random() * 8 + 1);
        spawn.nbr.text = numHasard;
}

Dans ton tableau tu insérait des variables, moi ce que je recommande c'est d'y mettre directement des objets, c'est à dire le clip une fois qu'il a été créé. Ceci devrait donc te donner des indices pour la suite, à savoir "commment savoir sur quel objet on a cliqué" ;)

Bon courage, je te laisse chercher un peu, attention à ton code, relis-le pour être sûr qu'il n'y a pas d'incoherence...



1 utilisateur(s) li(sen)t ce sujet

0 membre(s), 1 invité(s), 0 utilisateur(s) anonyme(s)

authorised training centre

Centre de Formation Mediabox - Adobe et Apple Authorised Training Center.

Déclaré auprès de la Direction du Travail et de la Formation Professionnelle

Mediabox : SARL au capital de 62.000€ - Numéro d'activité : 11 75 44555 75 - SIRET : 49371646800035

MEDIABOX, 23, rue de Bruxelles, 75009 PARIS

FFP