ActionScript 3 – Programmation séquentielle et orientée objet
356
Revenons à notre propos principal, pour découvrir la méthode permettant de détecter le
clic sur une ligne précise d’une occurrence de type TextField.
Vous allez devoir utiliser la méthode getLineIndexAtPoint() qui renvoie, comme son nom
l’indique, le numéro de ligne cliquée. Pour cela, vous devez préciser le nom d’une
instance de type TextField et des coordonnées x et y du clic. Nous utilisons généralement
celles de la souris. Précisons que la première ligne d’un texte renvoie toujours la valeur 0.
Dans les deux exemples ci-dessous, nous aimerions connaître le numéro de ligne cliquée
pour pouvoir l’utiliser en tant qu’index d’un tableau. Dans un souci de simplification,
nous n’avons pas utilisé un fichier XML, ce qui aurait été plus judicieux et aurait permis
de stocker davantage d’informations.
Voici un premier exemple qui présente les lignes d’instructions minimales et nécessaires
pour détecter une ligne cliquée. Deux textes dynamiques intitulés listeParticipants et
ageParticipant ont été créés sur la scène.
Fichier de référence : Chapitre14/texte4bis.fla
var numeroLigneCliquee:Number;
var anneesNaissance:Array = new Array(1945,1963,1902,1967,1965,2006,2002);
function connaitreNumeroLigneCliquee(evt:MouseEvent) {
numeroLigneCliquee = listeParticipants.getLineIndexAtPoint(listeParticipants.mouseX,
➥listeParticipants.mouseY);
ageParticipant.text = anneesNaissance[numeroLigneCliquee];
}
listeParticipants.addEventListener(MouseEvent.MOUSE_DOWN,connaitreNumeroLigneCliquee);
Apportons quelques commentaires : nous commençons par déclarer deux variables sur
les deux premières lignes du script. La première va stocker un nombre correspondant au
numéro de ligne cliquée, la deuxième contient un tableau dont les valeurs correspondent
à des années de naissance. La première entrée du tableau sera associée à la première ligne
de notre liste de personnes. Nous créons ensuite un constructeur intitulé connaitreNumeroLigneCliquee que nous allons exécuter lorsque l’utilisateur cliquera sur la liste de noms.
Justement, lorsqu’un clic se produira, le numéro de la ligne cliquée servira d’index pour
rechercher une entrée du tableau.
Voici un deuxième exemple qui gère et génère le contenu de la scène dynamiquement.
Fichier de référence : Chapitre14/texte4.fla
var listeParticipants:TextField = new TextField();
var ageParticipant:TextField = new TextField();
var numeroLigneCliquee:Number;
var participants:Array = new Array("Robert LEDOUX","Eric DURAND","Jean DUPUIS",
➥"Eva MARTIN","Luc GRANDJEAN","Luna DUPOND","Jules OUVILLE");
var anneesNaissance:Array = new Array(1945,1963,1902,1967,1965,2006,2002);
for each (var nom:String in participants) {
listeParticipants.appendText(nom+"\n");
356
Revenons à notre propos principal, pour découvrir la méthode permettant de détecter le
clic sur une ligne précise d’une occurrence de type TextField.
Vous allez devoir utiliser la méthode getLineIndexAtPoint() qui renvoie, comme son nom
l’indique, le numéro de ligne cliquée. Pour cela, vous devez préciser le nom d’une
instance de type TextField et des coordonnées x et y du clic. Nous utilisons généralement
celles de la souris. Précisons que la première ligne d’un texte renvoie toujours la valeur 0.
Dans les deux exemples ci-dessous, nous aimerions connaître le numéro de ligne cliquée
pour pouvoir l’utiliser en tant qu’index d’un tableau. Dans un souci de simplification,
nous n’avons pas utilisé un fichier XML, ce qui aurait été plus judicieux et aurait permis
de stocker davantage d’informations.
Voici un premier exemple qui présente les lignes d’instructions minimales et nécessaires
pour détecter une ligne cliquée. Deux textes dynamiques intitulés listeParticipants et
ageParticipant ont été créés sur la scène.
Fichier de référence : Chapitre14/texte4bis.fla
var numeroLigneCliquee:Number;
var anneesNaissance:Array = new Array(1945,1963,1902,1967,1965,2006,2002);
function connaitreNumeroLigneCliquee(evt:MouseEvent) {
numeroLigneCliquee = listeParticipants.getLineIndexAtPoint(listeParticipants.mouseX,
➥listeParticipants.mouseY);
ageParticipant.text = anneesNaissance[numeroLigneCliquee];
}
listeParticipants.addEventListener(MouseEvent.MOUSE_DOWN,connaitreNumeroLigneCliquee);
Apportons quelques commentaires : nous commençons par déclarer deux variables sur
les deux premières lignes du script. La première va stocker un nombre correspondant au
numéro de ligne cliquée, la deuxième contient un tableau dont les valeurs correspondent
à des années de naissance. La première entrée du tableau sera associée à la première ligne
de notre liste de personnes. Nous créons ensuite un constructeur intitulé connaitreNumeroLigneCliquee que nous allons exécuter lorsque l’utilisateur cliquera sur la liste de noms.
Justement, lorsqu’un clic se produira, le numéro de la ligne cliquée servira d’index pour
rechercher une entrée du tableau.
Voici un deuxième exemple qui gère et génère le contenu de la scène dynamiquement.
Fichier de référence : Chapitre14/texte4.fla
var listeParticipants:TextField = new TextField();
var ageParticipant:TextField = new TextField();
var numeroLigneCliquee:Number;
var participants:Array = new Array("Robert LEDOUX","Eric DURAND","Jean DUPUIS",
➥"Eva MARTIN","Luc GRANDJEAN","Luna DUPOND","Jules OUVILLE");
var anneesNaissance:Array = new Array(1945,1963,1902,1967,1965,2006,2002);
for each (var nom:String in participants) {
listeParticipants.appendText(nom+"\n");
