Retrouvez les publications relatives à ces discussions dans
notre rubrique web design et flash.
liste des forums
liste des discussions
Participer à la discussion
-
Message publié le lundi 18 mai 2009 - 02h30 par Tibo. |Tibo|
-
Bonjour,
Je bidouille un petit jeu de type RPG en Flash(AS2). J’ai différentes classes dont « Perso » qui crée un des personnages (max 3) que le joueur a dans son équipe. La classe « Fight » qui regroupe tout les événements d’un combat…
Quand je crée un nouveau « Fight » je passe en paramètre un tableau avec les ids des personnages qui participeront à ce combat. Le constructeur récupère via une NetConnection (vers un AMFphp/sql) les informations nécessaires à la création des personnages puis les crées dans son tableau « team » (du genre : for(i) - > this.team = new Perso([resultat_du_nc]) ; ).
Tout cela fonctionne bien mais malheureusement l’occurrence de Fight met du temps à créer les Persos (amfphp met quelques millisecondes(x3) à répondre).
Donc par exemple :
//-----------------------------------Frame 1
var table_perso :Array = new Array() ;
table_perso[0] = “id0”;
table_perso[1] = “id1”;
table_perso[2] = “id2”;
var aFight :Fight = new Fight(table_perso);
Trace(aFight .team[0].perso_name);
//-----------------------------------END
Ce code trace « undefined » alors que si par exemple je met le trace() à la frame 40, ça trace bien le nom du premier perso de la team, puisque les objet Persos ne sont pas encore crées dans le premier cas.
Je cherche donc un moyen pour que le script attende la fin de la création de tous les Persos avant de continuer. Une sorte de méthode/fonction bloquante.
Je vous remercie de m’avoir lu et j’espère que vous pourrez m’aider.
La solution de l'Interval ne convient pas puisque le temps de chargement dépend du lag entre le joueur et l'amfphp.
Je me suis aussi posé la question d'un petit Interval qui check si tout est bien chargé sinon on relance l'interval... mais ce ne semble pas très "propre" et surtout ça ne bloque pas le script.
La solution de mettre toute la suite du code dans une fonction appelée seulement à la fin du chargement me parait chaotique, surtout avec une série d'obj.
Cordialement.
Tibo.
-
Message publié le lundi 18 mai 2009 - 02h43 par Tibo. |Tibo|
-
Petits oublis:
1. Erreur sur l'exemple de formation d'une team (le "[ i ]" est passé comme du BBCode) : for(i) - > this.team[ i ] = new Perso([resultat_du_nc]) ;
2. J'ai besoin que tout mon code tienne sur une seulle frame, donc je ne peux pas faire une boucle sur plusieurs frames pour attendre que tout soit chargé :-/
-
Message publié le samedi 13 juin 2009 - 22h04 par Lunafelina.
-
Par essence aucun code n'est bloquant en Flash, et d'ailleurs si un code de frame met trop longtemps à s'exécuter une erreur apparaît...
La solution optimale serait selon moi de définir une fonction dans ta "Frame 1" qui écoute un événement du type "connection_réussie" et qui "achève" le traitement exactement comme tu comptais le faire juste après la création de l'objet "fight" (dans l'optique bloquante). Jette un oeil aux événements propagés par NetConnection et tu devrais trouver ton bonheur.
nb : Attention que le code de la frame 1 d'un MovieClip est exécuté à la propagation de l'événement ENTER_FRAME et non à la construction de l'objet.
liste des forums
liste des discussions
Participer à la discussion
Vous devez obligatoirement vous identifier en tant que membre pour participer à cette discussion.