AS3 problème de détection des touches de clavier sur une seconde scène

cs_cb3 Messages postés 1 Date d'inscription jeudi 28 avril 2011 Statut Membre Dernière intervention 2 mai 2011 - 2 mai 2011 à 02:28
aerolyte Messages postés 465 Date d'inscription mardi 17 avril 2007 Statut Membre Dernière intervention 4 mai 2013 - 2 mai 2011 à 17:30
Bonjour,

J'ai quelques soucis avec un programme Flash. Je me suis créer 2 scènes différentes; la première où il y a de multiples calques permettant de représenter 3 saisons (à partir d'étiquettes nous sommes en mesure d'aller les chercher) et la seconde scène correspond à un menu. À partir de ce menu, on peut utiliser les touches du clavier "A", "E" et "P" pour accéder au étiquette "Automne", "Estival" et "Printemps" de la scene 1. Cependant lorsque je me promène dans ces différentes étiquette et que j'ai recours à mon menu, mon programme ne détecte aucune touche du clavier jusqu'à ce que je clique dans la scène. Je ne comprends pas trop le problème, car si je n'accède aux étiquettes uniquement avec mon menu, je ne rencontre pas ce problème; les touches fonctionnent normalement! En tout cas si quelqu'un pourrait me donner un tuyau, ce serait fort apprécié!!!!

Scène 1
Calque actions:
stage.addEventListener(KeyboardEvent.KEY_DOWN, retour_menu);

function retour_menu(event:KeyboardEvent):void
{
trace("bonjour");
trace("ASCII: " + event.keyCode);
switch(event.keyCode)
{
case 32 : MovieClip(root).gotoAndPlay("menu","Menu");
//Empêche de revenir au saison par la toucher espace
stage.removeEventListener(KeyboardEvent.KEY_DOWN, retour_menu);
break;
}

}

Calque Temperature
chang_temp_btn.addEventListener(MouseEvent.CLICK, change_temperature);

//Déclaration des variables de températures
var temperature:int;
var temperature_avant:int;

//Initialisation des variables
temperature_avant = int(temperature_txt.text);
trace ("temperature d'avant:" + temperature_avant);
temperature = Number(temperature_txt.text);

//Message selon la température des différentes saisons
if (temperature > 20 && temperature < 46)
{
gotoAndStop("Estival");
message_saison.text = "C'est l'été!";
}

else if (temperature > 9 && temperature < 21)
{
gotoAndStop("Printemps");
message_saison.text = "C'est le printemps!";
}

else if (temperature > -6 && temperature < 10)
{
gotoAndStop ("Automne");
trace("automne");
message_saison.text = "C'est l'automne!";
}

else
{
message_saison.text = "Cette température est invalide!";
}


//Vérification de la température dans la zone texte lorsqu'on clique sur le bouton "Changement de température"
function change_temperature(event:MouseEvent):void
{
//Initialisation des variables
temperature = Number(temperature_txt.text);

trace("EVENEMENT : Clique sur bouton pour changer la température");
trace(temperature_avant);
trace(temperature);


//On remet les éléments du ciel si on passe de l'automne à une autre saison
if (temperature_avant < 10 && temperature > 9 && temperature < 46)
{
//Ajout des éléments du ciel à la scène
addChild(Soleil);
addChild(nuage);
trace("ajout soleil et nuage");

}

else if (temperature_avant > 9 && temperature < 10 && temperature > -6)
{
//Supprime le symbole du Soleil quand c'est l'automne
removeChild(Soleil);
removeChild(nuage);
trace("suppresion");
}

//Évaluation de la nouvelle température
if (isNaN(Number(temperature_txt.text)) || temperature < -5 || temperature > 45)
{
message_saison.text = "Température invalide";
return;
}

//Automne
else if (temperature < 10)
{
trace ("c'est l'automne");
gotoAndStop ("Automne");

//On vérifie s'il y a un changement de saison ou non
if (temperature_avant > 9)
{
message_saison.text = "Changement de saison, c'est l'automne!";
}
else
{
message_saison.text = "C'est l'automne";
//removeChild(Soleil);
}
}

//Printemps
else if (temperature > 9 && temperature < 21)
{
gotoAndStop("Printemps");

//On vérifie s'il y a un changement de saison ou non
if (temperature_avant < 10 || temperature_avant > 20)
{
message_saison.text = "Changement de saison, c'est le printemps!";
}
else
{
message_saison.text = "C'est le printemps!";
}
}

//Été
else if (temperature > 20)
{
gotoAndStop("Estival");

if (temperature_avant < 21)
{
message_saison.text = "Changement de saison, c'est l'été!";
}
else
{
message_saison.text = "C'est l'été!";
}
}

// C'est la nouvelle température initiale de la nouvelle saison(permet de vérifier le changement des saisons)
temperature_avant = temperature;
trace ("temperature d'avant:" + temperature_avant);
}

Scène 2:
stage.addEventListener(KeyboardEvent.KEY_DOWN, menu_saison);

stop();

//Supprime le symbole du Soleil et nuage
if (temperature > 9)
{
removeChild(Soleil);
removeChild(nuage);
}

trace(KeyboardEvent.KEY_DOWN);

function menu_saison(event:KeyboardEvent):void
{
trace("ASCII: " + event.keyCode);
switch(event.keyCode)
{
case 65 : MovieClip(root).gotoAndStop(1,"Scene_saison");
MovieClip(root).gotoAndStop("Automne","Scene_saison");
//On insère une temp. automnale par défaut
temperature_txt.text = "5"
//On insère la valeur manuellement, car le calque temperature n'évalue pas lors du changement de scène
temperature_avant = int(temperature_txt.text);
temperature = Number(temperature_txt.text);
message_saison.text = "C'est l'automne!";
//Supprime le symbole du Soleil quand c'est l'automne
removeChild(Soleil);
removeChild(nuage);
stage.removeEventListener(KeyboardEvent.KEY_DOWN, menu_saison);
break;


case 69: MovieClip(root).gotoAndStop(1,"Scene_saison");
MovieClip(root).gotoAndStop("Estival","Scene_saison");
//On insère une temp. estivale par défaut
temperature_txt.text= "25" ;
//On insère la valeur manuellement, car le calque temperature n'évalue pas lors du changement de scène
temperature_avant = int(temperature_txt.text);
temperature = Number(temperature_txt.text);
message_saison.text = "C'est l'été!";
//Ajoute le symbole du Soleil quand c'est l'été
addChild(Soleil);
addChild(nuage);
stage.removeEventListener(KeyboardEvent.KEY_DOWN, menu_saison);
break;


case 80: MovieClip(root).gotoAndStop(1,"Scene_saison");
MovieClip(root).gotoAndStop("Printemps","Scene_saison");
//On insère une temp. printanière par défaut
temperature_txt.text= "15" ;
//On insère la valeur manuellement, car le calque temperature n'évalue pas lors du changement de scène
temperature_avant = int(temperature_txt.text);
temperature = Number(temperature_txt.text);
message_saison.text = "C'est le printemps!";
//Ajoute le symbole du Soleil quand c'est le printemps
addChild(Soleil);
addChild(nuage);
stage.removeEventListener(KeyboardEvent.KEY_DOWN, menu_saison);
break;

default : break;
}
}
A voir également:

1 réponse

aerolyte Messages postés 465 Date d'inscription mardi 17 avril 2007 Statut Membre Dernière intervention 4 mai 2013 1
2 mai 2011 à 17:30
Bonjour,

En effet, une animation swf, neccessite un premier clic souris pour mettre le focus sur celle-ci.

Cordialement
0
Rejoignez-nous