Function pour creer un objet (rectangle+textdynamique+bouton)

Résolu
craminus Messages postés 14 Date d'inscription samedi 13 décembre 2008 Statut Membre Dernière intervention 20 décembre 2008 - 14 déc. 2008 à 11:44
 soukainadinari - 30 avril 2013 à 11:58
Bonjour, je cherche à faire ceci:
___________________________
I          Zone texte dynamique         I
I                                                    I
I                 Bouton                        I
I__________________________I      le contour étant un rectangle(couleur de fond,x,y,l,h en parametre)

Je sais faire cela sans trop de problème à la main.
Mais j'aurais besoin d'une cinquantaine de ses objets, pouvoir modifier le texte de la zone de texte, récuperer le clic, le survole du bouton, bouger à volonter l'ensemble et pouvoir le faire apparaitre et disparaitre à volonter. Bien sur pour chacun des 50 occurences créées

Je suis débutant en AS 2. Je pense qu'il faut créer une fonction mais je n'arrive à rien.
Merci de votre aide.

Minus

16 réponses

Skev Messages postés 255 Date d'inscription mardi 27 juin 2006 Statut Membre Dernière intervention 9 janvier 2010 3
15 déc. 2008 à 17:46
Pour craminus, oui il est tout a fait possible de creer en serie des textfield, comme des clip d'ailleur à l'aide du boucle for.
Voici un exemple d'illustration :
//
texto = new Array("Text1", "Text2", "Text3", "Text4");
//
format = new TextFormat();
format.color = 0x000000;
//
for (i=0; i<texto.length; i++) {
    this.createTextField("Text"+i, i, 10, 10+(20*i), 300, 20);
    eval("Text"+i).text = texto[i];
    eval("Text"+i).setTextFormat(format);
}
//
3
Skev Messages postés 255 Date d'inscription mardi 27 juin 2006 Statut Membre Dernière intervention 9 janvier 2010 3
15 déc. 2008 à 22:48
Pour l'histoire de tableau multidimensionnel, je sais pas exactement l'effet graphique que tu veux donner mais tu peux te faire une idée avec ça :

//
texto1 = new Array("Text1", "Text2", "Text3");
texto2 = new Array("Text4", "Text5", "Text6");
texto3 = new Array("Text7", "Text8", "Text9");
texto = new Array(texto1, texto2, texto3);
texto_color = new Array("000000", "FF0000", "00FF00");
//
format = new TextFormat();
//
for (i=0; i<texto.length; i++) {
    for (j=0; j<texto[i].length; j++) {
        this.createTextField("Text"+i+j, this.getNextHighestDepth(), 10, 10+(20*this.getNextHighestDepth()), 300, 20);
        eval("Text"+i+j).text = texto[i][j];
        format.color = "0x"+texto_color[i];
        eval("Text"+i+j).setTextFormat(format);
    }
}
//
3
Skev Messages postés 255 Date d'inscription mardi 27 juin 2006 Statut Membre Dernière intervention 9 janvier 2010 3
15 déc. 2008 à 01:11
Bonsoir,

Et bien tu peux créer un clip vide avec la fonction "createEmptyMovieClip",
Dessiner le rectangle a l'intérieur a l'aide des fonctions "moveTo" et "lineTo" pour le dessin, "beginFill()" et "endFill" pour le colorer, ou encore "lineStyle()" pour la couleur et epaisseur du contour.
Pour le bouton même méthode a l'exception que tu change la cible pour la creation du clip.
La zone de texte peut etre crée avec "createTextField()".
Le clic et le survole du bouton avec "onPress" et "onRollOver".
Si tu entend bouger a volonté par cliquer et maintenir pour bouger et stopper le mouvement au relachement du clic , utilise "startDrag()" associer a "onPress" et "stopDrag()" associer a "onRelease".
Pour la disparition sois tu joue sur la transparence avec la propriété "_alpha" sois tu utilise "_visible".
Pour finir "duplicateMovieClip" te permetra de dupliquer ton clip en plusieur occurence.

Voila tu n'as plus qu'as te renseigner sur tout ça et les regrouper dans une seul et meme fonction.

PS : si tu as besoin de plus de details ou exemples pour une des proprietes ou fonctions n'hesite pas a demandé. Tu peux egelement consulté les differentes sources mis a disposition ici.
0
neodede Messages postés 1 Date d'inscription dimanche 16 novembre 2008 Statut Membre Dernière intervention 15 décembre 2008
15 déc. 2008 à 11:00
Bonjour!

Je suis aussi un débutant en actionscript et j'ai encore pas mal de problème avec la syntaxe des fonctions.

Ca serait possible de donner un poil plus de détail quant à l'écriture d'une fonction.

J'aimerais aussi pouvoir créer un rectangle via actionscript 2 mais j'aimerais qu'il puisse être cliquable pour appeler un swf ou une image.

merci!
0

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

Posez votre question
craminus Messages postés 14 Date d'inscription samedi 13 décembre 2008 Statut Membre Dernière intervention 20 décembre 2008
15 déc. 2008 à 17:11
Merci pour ta réponse skev, mais j'aurais voulu aussi savoir si on pouvais les créer toutes d'un coup avec un code du genre:
for(i=0;i<50;i++){
   ....
}
donc il me faudrais sans doute un tableau de TextField.
j'ai essayé texto = new Array(50);
puis dans la boucle texto[i] = createTextField(...); mais ca ne marche pas!

Pourrais tu me donner un exemple de code ou il y a un tableau de TextField par exemple.
Merci beaucoup et j'espere que je n'en demande pas trop!

(j'ai regardé pas mal de tuto, de code.. et je n'ai rien trouvé)

Minus
0
Skev Messages postés 255 Date d'inscription mardi 27 juin 2006 Statut Membre Dernière intervention 9 janvier 2010 3
15 déc. 2008 à 17:32
En consultant l'aide de Flash on voit que l'on peut créer un rectangle en utilisant les fonctions que je t'ai décrites plus haut.
Voila ce que nous donne cette aide :

this.createEmptyMovieClip("square_mc", this.getNextHighestDepth());
//On creer un nouveau clip vide nommé "square_mc" qu'on place au plus haut niveau actuel de profondeur a l'aide de la fonction "this.getNextHighestDepth()"
square_mc.beginFill(0xFF0000);
//On commence le coloriage du clip (ici le code hexadecimal "FF0000" correspond au rouge vif
square_mc.moveTo(10, 10);
//On deplace le clip a 10 pixel en _x et en _y
square_mc.lineTo(100, 10);
On trace une ligne de l'origine a 100px en _x a 100px en _y
square_mc.lineTo(100, 100);
//Pareille mais de notre nouveau point a 100px pour _x et 100px pour _y
square_mc.lineTo(10, 100);
//etc ...
square_mc.lineTo(10, 10);
//etc ...
square_mc.endFill();
//Puis on arrete le coloriage
//

En placant ce code sur la premiere image de la scene tu obtiendra
un carré rouge de 100 pixel de coté.

Maintenant creons la fonction parametrable, nous l'appelerons "Create_Rect"

Pour creer une fonction tu as juste a ecrire :
//
mafonction = function (){
}
//
Tu veux rajouter des parametre? Et bien ecrit simplement :
//
mafonction = function (param1,param2,prama3....){
}
//

Adaptons maintenant a notre situation
Nous utiliseront ici 6 parametre : nom du clip ,position x, position y, hauteur, largeur, couleur
//
Create_Rect = function (nom,posx,posy,h,l,col){
}
//
Et pour le contenu nous utiliserons la methode utiliser precedemment soit :
//
Create_Rect = function (nom, posx, posy, h, l, col) {
    this.createEmptyMovieClip("new_rect", this.getNextHighestDepth());
    new_rect.beginFill("0x"+col);
    new_rect.moveTo(posx, posy);
    new_rect.lineTo(posx+l, posy);
    new_rect.lineTo(posx+l, posy+h);
    new_rect.lineTo(posx, posy+h);
    new_rect.lineTo(posx, posy);
    new_rect.endFill();
    new_rect._name = nom;
};
//
Voila et pour appeler la fonction entre par exmple:
//
Create_Rect("monclip", 10, 15, 300, 100, 000000);
//
Pour creer un rectangle nommer "monclip" position a 10px en _x et 15px en _y, de 300px de largeur, 100px de heuteur et de couleur noir ("000000" correspond a la couleur noir)

En ce qui concerne les liens tu peux incorporer la fonction "onPress" dans ta fonction deja créée. Il te faudra egalement rajouter l'url en parametre exemple :
//
Create_Rect = function (nom, posx, posy, h, l, col, url) {
    this.createEmptyMovieClip("new_rect", this.getNextHighestDepth());
    new_rect.beginFill("0x"+col);
    new_rect.moveTo(posx, posy);
    new_rect.lineTo(posx+l, posy);
    new_rect.lineTo(posx+l, posy+h);
    new_rect.lineTo(posx, posy+h);
    new_rect.lineTo(posx, posy);
    new_rect.endFill();
    //
    new_rect.onPress = function() {
        getURL(url, "_blank");
    };
    new_rect._name = nom;
};
//

Voila en esperant avoir été suffisamment clair
0
craminus Messages postés 14 Date d'inscription samedi 13 décembre 2008 Statut Membre Dernière intervention 20 décembre 2008
15 déc. 2008 à 17:42
Oui ta réponse est super claire et je t'en remerci beaucoup.
Mais je ne cromprends toujours pas comment définir la zone ou je vais mettre le texte dynamique.
Peut etre dans la function? Mais je croyais avoir lu qu'on ne pouvais pas mettre de texte dynamique dans un movieclip?
et enfin comment je fais pour changer son text si c'étais possible.

Je sais qu'avec un textField il suffit de faire nom._text = "blabla";
mais ici ce serait quoi le nom?

Pour un tableau de textField (juste cela) je n'y arrive pas non plus.

Mais en tout cas un grand merci pour tes 2 réponses rapides et précises.

Minus
0
craminus Messages postés 14 Date d'inscription samedi 13 décembre 2008 Statut Membre Dernière intervention 20 décembre 2008
15 déc. 2008 à 18:06
un grand merci à toi.
Super cet exemple.
et en plus de manière super rapide.

Minus
0
Skev Messages postés 255 Date d'inscription mardi 27 juin 2006 Statut Membre Dernière intervention 9 janvier 2010 3
15 déc. 2008 à 18:07
Pas de soucis
0
craminus Messages postés 14 Date d'inscription samedi 13 décembre 2008 Statut Membre Dernière intervention 20 décembre 2008
15 déc. 2008 à 19:35
oups j'ai encore un souci!
Ton code marche sur un calque précis mais pas partout!
je m'explique: je crée les textfield sur le calque 1:

format = new TextFormat();
format.color = 0x000000;
for (i=0; i<5; i++) {
 this.createTextField("Text"+i, i, 10, 10+(20*i), 300, 20);
  eval("Text"+i).setTextFormat(format);
}

j'ai un calque action script
for (i=0; i<5; i++) {
eval("Text"+i).text = "cou"+i;    
}
rien ne se passe
Il faut sans doute que les variables soient globales?comment faire?

deuxieme question!!:
est ce possible de faire un tableau de tableau de textfield? genre 20 x 10

Minus
0
Skev Messages postés 255 Date d'inscription mardi 27 juin 2006 Statut Membre Dernière intervention 9 janvier 2010 3
15 déc. 2008 à 19:55
Et bien je suis un peu étonné car chez moi le code fonctionne parfaitement, calque différent ou non. Tes calques, sont-il tout deux sur la scène?

Et pour ta seconde question, c'est tout a fait possible de faire un tableau avec des Textfield, d'ailleurs tu peux afficher les bordures des textfields comme ceci :
//
eval("Text"+i).border = true;
0
craminus Messages postés 14 Date d'inscription samedi 13 décembre 2008 Statut Membre Dernière intervention 20 décembre 2008
15 déc. 2008 à 22:01
les tableaux dont je parlais c'étais un tableau de plusieurs dimension de textField:

genre:
text = new Array(20);
for(i=0;i<20;i++){
   text[i] = new array(10);
      for(j=0;j<10;j++){
         text[i][j] = new textField(...)   //mais ici je ne sais pas comment déclarer ce tableau à plusieurs dimensions
}}

Encore merci pour toutes tes réponses rapides

Minus
0
craminus Messages postés 14 Date d'inscription samedi 13 décembre 2008 Statut Membre Dernière intervention 20 décembre 2008
15 déc. 2008 à 22:06
j'ai trouvé pourquoi ca ne marchais pas pour les calques différents, et que chez toi ca marchait!!
cela depend de l'ordre des calques!!

Minus
0
craminus Messages postés 14 Date d'inscription samedi 13 décembre 2008 Statut Membre Dernière intervention 20 décembre 2008
16 déc. 2008 à 16:58
Merci beaucoup pour toutes tes réponses.

Minus
0
Skev Messages postés 255 Date d'inscription mardi 27 juin 2006 Statut Membre Dernière intervention 9 janvier 2010 3
16 déc. 2008 à 18:52
Pas de quoi
0
soukainadinari
30 avril 2013 à 11:58
Bonjour Skev,
Peux-tu m'aider a créer un bouton qui permet de dessiner un rectangle sur un canvas qu'on a déjà créer?
http://lbiopapy.linux59.info/index.php/joomla-fr/mon-planoila ce que je dois faire http://lbiopapy.linux59.info/index.php/joomla-fr/mon-plan
et merci d'avance.
0
Rejoignez-nous