Forums Développement Multimédia

Aller au contenu

[Résolu] - Cibler un texte dynamique dans un clip importé.

CODE TUTO

22 réponses à ce sujet

#1 cortoh

    Ceinture Noire

  • Members
  • PipPipPipPipPipPipPip
  • 344 messages

Posté 04 June 2017 - 06:17 AM

Bonjour à tous,

Tout d'abors heureux de voir que Mediabox et certain membre sont encore présent, c'est réjouissant.
Absent depuis un bon bout de temps j'ai ré-ouvert mon Flash hier pour réaliser une petite appli.
Je voudrais savoir comment cibler ou déclarer un texte dynamique qui ce trouve dans un clip que j'importe via "addChild();"

Merci.

#2 Monsieur Spi

  • Community Manager
  • PipPipPipPipPipPipPipPip
  • 6954 messages

Posté 04 June 2017 - 09:21 AM

Salut,

Si mes souvenirs sont bons, quand tu crée ton texte dynamique il doit avoir un nom d'instance.
Dans ce cas tu peux faire : monObjet.monTexteDynamique.text = "mon texte";

#3 cortoh

    Ceinture Noire

  • Members
  • PipPipPipPipPipPipPip
  • 344 messages

Posté 05 June 2017 - 07:21 AM

Salut,
Merci pour la réponse mais sous cette forme l'utilistion de "appendText("A");" ne fonctionne plus, je vais trancher en gardant les clips directement dans ma scène.
Merci

#4 pol2095

  • Members
  • PipPipPipPipPipPipPipPip
  • 1682 messages

Posté 05 June 2017 - 19:01 PM

ou

monClip.monTexteDynamique.appendText("mon texte");
 


#5 cortoh

    Ceinture Noire

  • Members
  • PipPipPipPipPipPipPip
  • 344 messages

Posté 06 June 2017 - 06:01 AM

Bonjour,
C'est ce que je précise sur mon dernier poste, "appendText" ne fonctionne plus dans cette condition.


var page_abc:page_ABC = new page_ABC();
var texte_1:String =""; page_abc.texte_ABC.text = String(texte_1);

addChild(page_abc);

page_abc.tch_a.addEventListener(MouseEvent.CLICK, tch_A);
   function tch_A(me:MouseEvent):void {
  page_abc.texte_ABC.appendText("A") ;
  }

 
Sinon inversement y a t-il un moyen d'effacer une ou plusieurs lettres en revenant en arrière ?
Merci

#6 pol2095

  • Members
  • PipPipPipPipPipPipPipPip
  • 1682 messages

Posté 06 June 2017 - 11:11 AM

texte_ABC est une propriété public donc tu y as forcément accès, est-ce que le click est détécté ?

#7 cortoh

    Ceinture Noire

  • Members
  • PipPipPipPipPipPipPip
  • 344 messages

Posté 06 June 2017 - 19:05 PM

oui j'ai vérifié.

#8 Monsieur Spi

  • Community Manager
  • PipPipPipPipPipPipPipPip
  • 6954 messages

Posté 06 June 2017 - 19:18 PM

Re,

Exemple (simplifié) de la doc : http://help.adobe.co...tml#appendText()
var outputText:TextField = new TextField();

outputText.text = "Hello" + "\n\n";
outputText.appendText("Add new text");

this.addChild(outputText);

Vérifies si "page_abc.texte_ABC" te renvoie bien un textField (fais un trace dessus tout simplement).

#9 cortoh

    Ceinture Noire

  • Members
  • PipPipPipPipPipPipPip
  • 344 messages

Posté 06 June 2017 - 20:21 PM

En fait c'est rentrée dans l'ordre je ne voyais effectivement pas pourquoi ça ne fonctionnais pas de plus je n'avais pas de message d'erreur, j'ai pas trop compris.
Pouvez vous me donner une piste pour créer une touche de correction pour effacer lettre par lettre d'un mot entré en fonction de mon code actuel.


var page_abc:page_ABC = new page_ABC();
var texte_1:String =""; page_abc.texte_ABC.text = String(texte_1);

addChild(page_abc);

page_abc.tch_a.addEventListener(MouseEvent.CLICK, tch_A);
   function tch_A(me:MouseEvent):void {
  page_abc.texte_ABC.appendText("A") ;
  }

 
Merci

#10 archiroc

    Ceinture Noire

  • Members
  • PipPipPipPipPipPipPip
  • 255 messages

Posté 06 June 2017 - 20:39 PM

C'est rigolo,
Enfin...
Ca ne fait rire que moi.
Mais je travaillais ce jour sur du texte dans des clips avec texte.
Même problème pour cibler.
Pourquoi ca marche... ou pas ?


var mc : MovieClip = new MovieClip;
var outputText:TextField = new TextField();
mc.addChild(outputText);
outputText.text = "Hello" + "\n\n";
addChild(mc);
//mc.outputText.appendText("Mr SPI"); // MARCHE PAS
outputText.appendText("Mr SPI"); // LA C'EST OK
 

Chais pas...
( Mais c'est pas grave )

#11 Monsieur Spi

  • Community Manager
  • PipPipPipPipPipPipPipPip
  • 6954 messages

Posté 06 June 2017 - 21:22 PM

archiroc > "outpoutText" est déclaré à l'endroit où tu as écrit "var outpoutText: ...." il est donc accessible ici, ensuite là où il est affiché on s'en fout, pour être plus clair il y a une différence entre où l'objet est déclaré dans le code (son instance) et où il est affiché à l'écran (la displayList). Là il est déclaré (var) à la racine du code mais affiché (addchild) à l’intérieur d'un autre clip (il fait partie de sa displayList). Il est donc accessible (existe) dans le code directement là où il est déclaré et pas via l'objet d'affichage (displayObject) dans lequel tu l'a inséré. L'objet d'affichage ne sert qu'à dire "je prend cet objet là et je le gère pour l'affichage dans ma propre liste".

C'est justement tout l'avantage de gérer les objets avec le code, on s'affranchit de l'endroit où ils sont affichés, on n'est donc plus dépendant de la conception graphique et des chemins biscornus qu'elle entraine pour savoir où sont nos objets et quand ils existent ou pas.

corthot >

Citation

Pouvez vous me donner une piste pour créer une touche de correction pour effacer lettre par lettre d'un mot entré en fonction de mon code actuel.

J'ai pas tout compris, mais si tu cherche à effacer du texte lettre par lettre tu peux t'y prendre de plusieurs manières.
Tout d'abord regarde la doc à propos des méthodes disponibles sur String : http://help.adobe.co...&filter_air=2.6

Tu peux utiliser les méthodes splice, split, replace, join, substring, substr, search, charAt, ....

Ensuite il faut comprendre qu'une chaîne de caractères est une sorte de tableau indexé avec un caractère par index, mais avec ses propres méthodes.

Du coup avec "slice" ça devrait marcher en ré-affectant à ton texte sa valeur tronquée :

var toto:String = "toto";
toto = toto.slice(0,-1);
trace(toto);

Reste à assigner une touche pour effacer ton texte, tu as la liste ici : http://www.dakmm.com/?p=272

Même principe pour des mots entiers, tu peux utiliser la méthode search ou passer par une regexp : http://help.adobe.co...t/3/RegExp.html

#12 cortoh

    Ceinture Noire

  • Members
  • PipPipPipPipPipPipPip
  • 344 messages

Posté 07 June 2017 - 06:14 AM

Bonjour,

Pour être plus précis j'ai 26 clips qui representent mon clavier comme celui d'un gps, donc j'écris le nom d'une ville grace à ces 26 touches mais si je fais une erreur de frappe en écrivant par exemple "Montauben" et bien une touche correction me permettrais d'éffacer les deux dernieres lettres comme une touche delete en faite.

Merci

#13 Monsieur Spi

  • Community Manager
  • PipPipPipPipPipPipPipPip
  • 6954 messages

Posté 07 June 2017 - 17:23 PM

Salut,

Soit je ne comprend pas la question, soit tu n'as pas lu/compris ma réponse ;)

Pour faire une "touche" de plus tu crée un clip de plus, dessus tu colle un écouteur pour vérifier quand on appuies sur la touche (exactement comme tu l'as fait pour le reste de ton "clavier" virtuel).

Lorsqu'on appuie sur cette "touche" tu déclenche la fonction suivante :


function deleteChar(e){
    tonTexte = tonTexte.slice(0,-1);
}
 


#14 cortoh

    Ceinture Noire

  • Members
  • PipPipPipPipPipPipPip
  • 344 messages

Posté 07 June 2017 - 20:59 PM

Salut,
Ben désolé c'est moi qui patauge :? , j'ai creé mon btn delete:

page_abc.tch_delete.addEventListener(MouseEvent.CLICK, tch_Delete);
   function tch_Delete(me:MouseEvent):void {
         page_abc.texte_ABC = page_abc.texte_ABC.slice(0,-1);
  }
 
J'ai un message d'erreur: Appel à la méthode slice peut-être non définie, via la référence de type static flash.text:TextField.

#15 Monsieur Spi

  • Community Manager
  • PipPipPipPipPipPipPipPip
  • 6954 messages

Posté 07 June 2017 - 21:21 PM

page_abc.texte_ABC.text = page_abc.texte_ABC.text.slice(0,-1);

C'est la String contenue dans le textField que tu veux modifier, donc tu dois modifier la propriété "text" du textField.

#16 cortoh

    Ceinture Noire

  • Members
  • PipPipPipPipPipPipPip
  • 344 messages

Posté 08 June 2017 - 05:51 AM

Merci pour ton aide Mr Spy, j'avoue qu'un peu de révision sur le sujet aurait été plus sérieux :oops: .

#17 cortoh

    Ceinture Noire

  • Members
  • PipPipPipPipPipPipPip
  • 344 messages

Posté 17 June 2017 - 08:14 AM

Bonjour,
Il n'y a pas de focus qui clignotte dans mon texte dynamique c'est un peu génant du moins quand on utilise la barre d'espace, visuellement l'utilisateur ne voit pas le curseur de saisie c'est déplacer, j'ai par défaut remplacé (" ") par ("_") mais bon c'est pas très esthétique.
J'ai tenté de passer le texte dynamique en texte de saisie, dans ce cas je peux appeller le focus en codant chaque touche

page_abc.tch_a.addEventListener(MouseEvent.CLICK, tch_A);
   function tch_A(me:MouseEvent):void {
  page_abc.texte_ABC.appendText("A") ;
  stage.focus = page_abc.texte_ABC;
  }
 
mais il est disparait quand j'utilise la touche correction.


page_abc.tch_delete.addEventListener(MouseEvent.CLICK, tch_Delete);
   function tch_Delete(me:MouseEvent):void {
         page_abc.texte_ABC.text = page_abc.texte_ABC.text.slice(0,-1);
  }
 

Si vous avez une solution je suis preneur.
Merci

#18 cortoh

    Ceinture Noire

  • Members
  • PipPipPipPipPipPipPip
  • 344 messages

Posté 17 June 2017 - 21:43 PM

Affaire réglé pour la touche delete:

page_abc.tch_delete.addEventListener(MouseEvent.CLICK, tch_Delete);
   function tch_Delete(me:MouseEvent):void {
  stage.focus = page_abc.texte_ABC;
         page_abc.texte_ABC.text = page_abc.texte_ABC.text.slice(0,-1);
  }
 


#19 cortoh

    Ceinture Noire

  • Members
  • PipPipPipPipPipPipPip
  • 344 messages

Posté 08 November 2017 - 22:43 PM

Bonsoir,

Je souhaiterais de l'aide pour optimiser mon code suivant en utilisant une boucle pour les 26 lettres de l'alphabet, j'ai établis la boucle pour les boutons mais je suis perdu en ce qui concerne l'attribution des lettres.

Le code de départ:

btn_1.addEventListener(MouseEvent.CLICK, tch_A);
   function tch_A(me:MouseEvent):void {
  texte_ABC.appendText("A") ;
  stage.focus = texte_ABC;
  }
btn_2.addEventListener(MouseEvent.CLICK, tch_<img src='http://forums.mediabox.fr/public/style_emoticons/<#EMO_DIR#>/cool.png' class='bbc_emoticon' alt='B)' />;
   function tch_B(me:MouseEvent):void {
  texte_ABC.appendText("B") ;
  stage.focus = texte_ABC;
  }
btn_3.addEventListener(MouseEvent.CLICK, tch_C);
   function tch_C(me:MouseEvent):void {
  texte_ABC.appendText("C") ;
  stage.focus = texte_ABC;
  }
 

Ma boucle pour les boutons:


var tabBtn:Array = [btn_1, btn_2, btn_3];
var max_Btn:int = tabBtn.length;
for (var i:int=0 ; i < max_Btn ; i++){
tabBtn[i].addEventListener (MouseEvent.CLICK, actBtn);

}

function actBtn (me:MouseEvent):void{

}
 

Merci d'avance pour votre aide.

#20 pol2095

  • Members
  • PipPipPipPipPipPipPipPip
  • 1682 messages

Posté 09 November 2017 - 09:44 AM

essaie

function actBtn (me:MouseEvent):void
{
        var index:int = tabBtn.indexOf( me.target );
        switch(index)
        {
                case 0:
                        texte_ABC.appendText("A") ;
                        break;
                case 1:
                        texte_ABC.appendText("B") ;
                        break;
                case 2:
                        texte_ABC.appendText("A") ;
                        break;
                ...
        }
        stage.focus = texte_ABC;
}
 


#21 Monsieur Spi

  • Community Manager
  • PipPipPipPipPipPipPipPip
  • 6954 messages

Posté 09 November 2017 - 19:16 PM

Hello,

Lors de la création de tes boutons, rajoute leur une propriété "montexte" :

btn_1.montexte = "A";

Puis tu fais ta boucle.
Puis :

function actBtn (e:MouseEvent):void
{
                texte_ABC.appendText(e.target.montexte);
                stage.focus = texte_ABC;
}


Ce qu'il faut comprendre :
Un bouton (ou un clip) est un "objet".
Tu peux lui ajouter des propriétés à la volée grâce à la syntaxe pointée (monObjet.maPropriété = valeur;).
Chaque bouton sait alors quelle propriété il contient, c'est de la "POO" quand on ne veux pas faire de classe, sinon une classe est bien plus propre.
Puis lorsque tu crée un écouteur d'événement, celui-ci fait du Bubling, il y a trois phases lors d'un événement, la phase de capture (l'événement se produit), la phase de recherche de l'élément actif et la remontée des informations (bubling) qui contient toutes les informations liées à l'événement (essaye de faire un trace du paramètre "e" - ou "me" dans ton cas, et regarde le résultat).

Parmi ces informations tu as "target" et "currentTarget".
"target" correspond à l'objet cliqué.
"currentTarget" correspond à l'objet conteneur (si tes objets sont dans un conteneur).
Donc tu peux récupérer l'objet cliqué lors d'un événement grâce à "e.target".
Si cet objet contient une propriété (ici "monTexte") tu peux l'utiliser tout simplement.

Ceci permet de ne faire qu'un écouteur d'événement pour un ensemble de boutons par exemple et de récupérer l'objet (le bouton) et ses propriétés, plutôt que de coller un écouteur par bouton.

Du coup pour optimiser dans ton cas, tu peux coller tous tes boutons dans un conteneur (un clip) du genre "menu".
Puis mettre un écouteur sur le "menu" et regarder ce qui est remonté par l'événement pour récupérer la cible (target) réellement cliquée, puis intervenir en conséquence. Plus besoin de tableau, plus besoin de boucle pour coller des événements sur tes boutons et une seule fonction qui fait le Job en fonction des propriétés de la cible cliquée.

Un truc du genre :

btn_1.montexte = "A";
btn_2.montexte = "B";
btn_3.montexte = "C";

menu.addChild(btn_1);
menu.addChild(btn_2);
menu.addChild(btn_3);

menu.addEventListener("click", actBtn);

function actBtn (me:MouseEvent):void
{
            texte_ABC.appendText(me.target.montexte);
            stage.focus = texte_ABC;
}


#22 cortoh

    Ceinture Noire

  • Members
  • PipPipPipPipPipPipPip
  • 344 messages

Posté 09 November 2017 - 20:57 PM

Bonsoir Monsieur Spi,

Merci beaucoup pour ces explications détaillées, dans un premier temps je code de façon basic afin de monter et mettre en place l'ensemble de mon projet puis j'affine certaine partie du code sachant qu'il y a diverses possibilités telles que les boucles ou les tableaux tout en ne sachant pas ou plus trop les écrires, j'ai bien saisi la formule des 2 codes seulement je ne comprend pas dans le dernier code

menu.addChild(btn_1);
 
dans ma logique les "btn" sont déjà présent dans le menu donc pas besoin de les importer à moins qu'il s'agisse peut-être d'importer
la propriété "montexte" ?

#23 Monsieur Spi

  • Community Manager
  • PipPipPipPipPipPipPipPip
  • 6954 messages

Posté 09 November 2017 - 21:35 PM

Si tes boutons sont déjà présents dans un conteneur (clip) nommé "menu" alors pas besoin de les remettre dedans avec addChild, je ne connais pas ton projet donc à toi d'adapter.



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