FLASH as3 - Structure - Préchargement des swf - Votre avis

Résolu/Fermé
Contemp - 21 mars 2014 à 15:28
bensonn Messages postés 55 Date d'inscription dimanche 24 janvier 2010 Statut Membre Dernière intervention 2 août 2019 - 25 juin 2014 à 18:48
Bonjour à vous chers lecteurs / helpers !



PRESENTATION DE MON PROJET

ALors voilà, débutante en Flash, j'ai créé une page flashy.html qui contient accueil.swf.

Accueil.swf comporte 16 boutons derrière lesquels se cachent des anims auxquelles on accède au click, actuellement via navigateToURL(new URLRequest("http://monsite.fr/anim1.html")); et anim1.html contient anim1.swf).
Vous comprenez ma logique (d'inexpérimentée) ?

Mes anims qui durent jusqu'à 1mn incluent également de la zik, dont certaines compressées à 4-5mo! (je ne peux pas descendre en dessous pour certaines, question de qualité audio). Donc ces anims mettent du temps à charger, ce qui risque de gonfler mes visiteurs.

Aussi, sur flashy.html (qui contient accueil.swf), j'ai un bonhomme qui dit bonjour, etc, mais j'aimerais que chaque fois que je retourne de anim1, anim50, anim6 vers accueil.swf, mon bonhomme puisse changer de disque !!!


QUESTIONS

1- Dois-je ne créer qu'un seul swf, contenant toutes mes anims en tant que swf externes ?

a) Si oui, j'ai déjà quelques anims qui contiennent elles-mêmes des swf externes, qui sont longs à charger, donc ya-t-il une façon de précharger tous les swf pendant la lecture d'une anim ?

b) Si non, donc si je reste avec ma structure actuelle, comment puis-je précharger mes swf, au vu de ma structure ? et en terme de code ?


J'attends vos réponses avant d'aller plus loin avec mon bonhomme.

Merci beaucoup,
A vous lire
A voir également:

6 réponses

Salut,

c'est beaucoup trop 4/5 Mo pour une minute(si vous parlez bien du poids compressé au final, en publiant vos fichiers peuvent être compressés de façon plus légére)... c'est le poids max que devrait faire votre swf complet, éventuellement chargé par fichiers externe les sons lorsqu'ils sont appelés pour alléger tout ça en répartissant le chargement pendant le début de la lecture.

Quant à la qualité que ce soit pour les images ou le son c'est une concession à faire à l'accessibilité qui prime avant tout, si vous voulez surtout un lecteur audio le mieux c'est de configurer la playlist en XML et de charger ce qu'il faut quand besoin.
L'accessibilité car beaucoup d'internautes vont simplement pas rester sur votre site si trop long à charger ou n'auront pas envie de revenir ou de continuer à utiliser le flash...

Pour le preload ça change pas la durée de chargement mais ça indique l'avancement du chargement, une simple recherche sur Google avec AS3 preload devrait vous fournir ce qu'il faut(ou en utilisant des composants, moi je les ai codés moi même et c'était en AS2 donc pas récent).

Q1
C'est une tendance tout comme utiliser au maximum les fichiers de scripts. Mais ça dépends, le but d'un fichier externe est la plupart du temps d'alléger le chargement d'un fichier principal, donc équilibre à trouver. L'autre but peut être l'organisation dans le but de réutiliser des swf sous forme de clip dans d'autres flash et de pouvoir les remplacer facilement en enregistrant une autre swf externe avec le même nom. Si vous avez beaucoup d'animation utilisez des 'clips'(même si le terme est plus forcément utilisé) externes permet aussi de s'y retrouver plus facilement, là aussi le but est d'avoir tout dans l'AS3, d'organiser et d'écrire de façon modulaire et limpide.
Donc à vous de voir et de trouver équilibre et organisation qui conviennent à votre façon de travailler(et besoins bien sûr).

a)Prévoyez l'appel au fichier externe avant(donc en prévoyant une latence dans la séquence de votre anim) puis lancez la lecture au moment où celle ci est nécessaire.
ça reste du bidouillage et en programmation comme en Flash ce n'est pas toujours une mauvaise chose sauf que ça vous complique la vie et peut forcer à rajouter un peu de durée de "démarrage", bref meubler le temps du chargement.
N'oubliez pas que pour les images vous pouvez utiliser des dimensions et devez utiliser une résolution adaptée au web(généralement 72dpi) , mettre un format non compressé est inutile puisue Flash le compresse en publiant, donc jpg et png en priorité(gif mais de moins bonne qualité donc juste par petits bouts); bien sûr encore plus rentable et quasiment sans poids il y a le vectoriel(qui peut très bien s'animer par le code ou l'interface graphique : tween/interpolation; en fait Flash est même fait pour ça).
Pour le son plusieurs extraits courts en boucle seront largement plus rentable qu'un gros fichier(surtout 4 à 5 Mo pour < d'1 minutes c'est le double des mp3 que j'écoute :s sans avoir à les télécharger donc inutile... vous pouvez obtenir une qualité valable avec un fichier 2 fois plus léger).

b)Le préchargement en Flash ou pas c'est obtenir le poids total d'un fichier puis afficher une boucle qui va comparer ce total à ce qui est chargé pour l'instant.Celui ci doit être placé en première frame de l'anim et l'anim ne doit pas démarrer avant le chargement total(je veut dire être présente) donc une façon de faire est de boucler sur la 1ère frame(ça c'est la façon qui mélange code et timeline). La même boucle peut être faite uniquement en code(mieux mais moins souple à utiliser).
A chaque fois que la boucle lit la taille du fichier chargé on fait une règle de trois ou un pourcentage (si besoin de faire une barre de progression avec un %) et on affiche celle ci: la barre avec par exemple un _xscale de son rapport : poids chargé/poids total(_xscale prends facilement un % comme valeur) et si on veut l'écrire un champ texte dynamique(si ça s'appelle encore comme ça) qui va afficher cette valeur. Une fois le poids chargé = au poids total passez à la frame qui démarre l'anim ou quittez la boucle du code.


"mais j'aimerais que chaque fois que je retourne de anim1, anim50, anim6 vers accueil.swf, mon bonhomme puisse changer de disque !!! "
ça me sembles plus une question d'encapsulation (jouer sur les niveaux de clip compris dans des clips) que d'externalisation.

Bon Flash :-))

https://www.google.fr/search?q=Action+script+3+preloader
0
Salut Bolgou,

Merci pour ces infos.

J'ai déjà mes progress bars en image 1, sur chacune de mes anims, et utilise jpg, png et vectoriel en direct...
Pour ce qui est du poids de certains mp3, c'est parce qu'on peut laisser tourner certaines anims qui font une ambiance cooli :)) et profiter du son en même temps !!
J'utilise Audacity pour couper mes tracks, créér des loops lorsque nécessaire et compresser en 128kbps donc pour diminuer le poids. J'ai les 3/4 de mes anims, son inclu qui ne pèsent qu'1 Mo.

Mais une track qui dure 10mn ne peut pas peser moins si on veut garder un semblant de qualité audio.
10mn, c'est parce qu'on peut laisser tourner l'anim, ça fait vraiment beau et cool, hypnotizing ! j'adore ! :p

-------------------------
Donc ok, je vais tenter un swf global contenant des swf externes appelés par mes boutons....
Quand je parle de précharger mes anims, je ne demande pas comment créer une progress bar, ça c'est maitrisé: je voudrais donc charger mes anims sans qu'elles ne se lancent avant même que le user ai cliqué sur un des boutons, et si possible dans un ordre que j'aurai déterminé.
-------
En ce qui concerne mon bonhomme qui parle, je me demandais si on ne peut pas créer dans l'anim principale, "accueil", un code de type random tchat, mais je ne sais pas comment le demander à Google, quels mots-clés taper.
J'avais vu un tuto de l'âne qui parle, sur le Site du Zéro, mais l'âne parle en continu. Ce que ej voudrais, c'est 1 ou 2 random phrase, pas 40, à chaque aller-retour sur "accueil". Je peux donc crééer 40 tchats, mais je voudrais que seulement 2 phrases soient débitées à chaque aller-retour.

QUels mots-clés taper sur Google pour ça?

Merciiiiiiiiiiiiiiii Bonne soirée à vous !
0
re,

oui en effet pour 10min ça se justifie plus, après le problème reste que si le flash est trop lourd ça va gaver les utilisateurs, donc peut être réduire la boucle son à une durée moindre.. à vous de voir.
Pour Audacity je l'utilise qu'en enregistrement lui préférant soundforge pour la simple édition son, je suppose qu'il y a possibilité d'ajouter des fade in and out en fiin//début pur éviter que la boucle "saute". Aux niveaux formats et qualité Flash possèdes quelques outils de compression qui sont pas si mal non plus.

Pour random c'est une fonction de base de Flash et donc pour les mots clés:

https://www.google.fr/search?q=random+action+script+3+flash

Avec un swicth ou if derrière pour afficher une phrase ou l'autre en fonction du résultat(mais ça je pense que vous vous en doutiez).

Pour déclencher le changement de la phrase selon votre principe(donc pas en fonction d'une durée mais d'actions de l'utilisateur) vous pouvez soit créer une fonction qui commanderas celle ci lors des clics sur vos boutons de navigation ou même utiliser un listener (écouteur en français) sur les objets que vous décidez d'être les déclencheurs de la phrase.

Sur votre point principal le chargement de swf externe je ne sait pas si vous utilisez la timeline ou seulement des fichiers action script.
Le principe restera le même: mettons que votre programme ai un certain nombre de fonctionnalités que j'appelerait "initialisation".
Pour une variable cela reviendrait à dire que lorsque votre programme démarre donc au début vous aller leur donner des valeurs.

//--initialisation
var x= 10;
var y= 20;

Pourquoi ne pas reprendre le même principe mais au lieu de charger/attribuer une valeur à une variable vous chargez le swf externe:
( j'ai trouvé ceci pour me rafraîchir la mémoire de la syntaxe action script
http://helpx.adobe.com/fr/flash/kb/load-external-swf-swf.html#main_Using_the_ActionScript_3_0_Loader_class
Je n'utiliserait pas pour mon exemple l'objet loader même si ça reste a meilleure façon de procéder
)

mon_instance.loadMovie("externeswf.swf");

S'il s'agit d'une animation qui doit démarrer à un moment précis le fait de la charger(d'où les nombreux avantages d'utiliser la méthode objet et le loader) va en plus faire lire l'animation.

Il faut donc que ce swf externe ne soit pas lu directement comme ceci(source http://help.adobe.com/fr_FR/ActionScript/3.0_ProgrammingAS3/WS5b3ccc516d4fbf351e63e3d118a9b90204-7d9d.html )

mon_instance.loadMovie("externeswf.swf", "clip_externe");
mon_instance.stop();

et donc quand besoin de lire l'animation:
clipexterne.play();

//-- éventuellement pour être sûr que ça démarre bien sur la première frame
//-- clip_externe.gotoAndPlay(0);


Dans votre programme vous devez juste vous assurer que "l'initialisation" de ces clip externes soit bien faite avant qu'elles puissent être utilisées... donc on se mords un peu la queue(le serpent hein^^) puisque:

Si vous faites des clips externes c'est pour alléger le chargement du fichier principal, hors il faut mettre le chargement des clips externes vers le début pour être sûr que ceci soient bien présent lorsque l'on en a besoin.
Je pense que vous vous en sortez en répartissant ceux ci pas au tout début mais peu après le chargement et démarrage du swf "maître", par exemple pendant la lecture d'une animation d'introduction.

Séquencer et séparé plusieurs animations ou fichiers interactifs swf peut se faore de bien des manières.
0
Bonjour :)



Disons que ça ne fait que 40jours maxi (dont la moitié passée à dessiner) que je suis sur Flash, donc je ne me doute pas encore de tout ce qui est faisable :D

j'ai vu pas mal d'exemples Random AS3 pour faire fluctuer des trajectoires et vitesses d'objets (ex: neige, ballon, etc..) mais pas d'exemple se rapprochant de mon projet. Je vais continuer à râtisser la toile et j'ose espérer que je finirai par trouver ce que je cherche.

Je prends note de vos indications,et voir ce que j'arrive à faire.
Merci.

PS: la page http://help.adobe.com/fr_FR/ActionScript/3.0_ProgrammingAS3/WS5b3ccc516d4fbf351e63e3d118a9b90204-7d9d.html ) n'est pas disponible..........
0
Salut,

La page est dispo, je l'affiche en copiant collant le lien , il doit s'agir d'un problème de votre côté(à moins que vous ayez un espace de trop dans votre copié collé).

L'avantage de Flash c'est qu'il y a plusieurs façons de travailler(même si la meilleure est de s'axer à fond sur des fichiers script et AS3).
Un moment que je n'ai pas mit la pâte sur un Flash récent mais il y a toujours les interpolations de forme et mouvement(motion tween) qui permette à partir d'une étape de la timeline à l'autre de faire toute les étapes intermédiaires.
Bien sûr il y a aussi la même chose qui peut être faite directement avec le code. Et ça concerne des déplacements, mise à l'échelle, rotation, changement de transparence(la fameuse couche alpha) etc.. Rien qu'avec le tuto interne du logiciel (ou sur le site d'Adobe) vous avez pas mal à faire et voir.

Voici un site sympa sur lequel je suit tombé en cherchant action script 3 effets déformation(avec code à l'appui, pour montrer qu'en quelques lignes aves les fonctions et objet flash vous avez des rendus assez baléze):

http://www.helloflash.net/Fichiers/HTML/CATEGORIES/effetsImage/effetsImage1.htm

Moi j'aimerais bien voir ce que vous faites, y a t'il une version en ligne?

Je recherchait un code que j'avais utilisé où l'utilisateur en déplaçant sa souris faisait un effet pluie avec la déformation comme regardant à travers une lentille d'eau, il y a vraiment beaucoup de fonctions prévues pour ça dans flash, pour le son il y en a quelques unes(même je suit pas toujours fan des effets et travail de la courbe son dans flash par rapport à un logiciel de mixage/montage son, ).


Pour une aide flash vous avez quelques sites avec de bons contenus et une communauté active. Je ne peut que vous citer mediabox qui est le laboratoire flash (approuvé par Adobe il me semble) et qui même s'il pousse l'utilisation de flash à ses limites techniques et expérimentales s'adresse aussi au débutant(par contre il est pas facile à naviguer).

https://www.google.fr/search?q=mediabox+flash

et pour le lien cité qui ne marche pas c'est le 4ème résultat de cette recherche:

https://www.google.fr/search?q=charger+swf+externe
0
bensonn Messages postés 55 Date d'inscription dimanche 24 janvier 2010 Statut Membre Dernière intervention 2 août 2019 4
25 juin 2014 à 18:37
Bonjour

je suis l'auteur du site que tu donnes en exemple : http://www.helloflash.net/Fichiers/HTML/CATEGORIES/effetsImage/effetsImage1.htm

Si tu veux poser des questions ou suggérer des animations, n'hésite pas à poser un message sur mon livre d'or !... ça me fera toujours plaisir...

:)
0
Merci beaucoup pour le lien vers Hello Flash ! Je n'avais pas encore atterri sur ce site, et les effets présentés sur la page en question sont very cool :)
Ca y est, il est dans mes favoris.


J'atterris souvent sur des topics de MediaBox, desquels j'ai appris certaines choses, mais qui sont encore parfois un peu trop complexes vu mon petit niveau actuel.

lol ah oui, le lien fonctionne, effectivement ça devait être un problème d'espace, oops :)

Oui, c'est ce que j'étais en train de mettre en application : myExternalSwf.alpha =0; Je vais procéder comme ça, et tenter de faire cheminer les users en allumant les boutons les uns après les autres au fil du chargement des mes swf externes...


Pour l'instant, ce que je fais n'est pas montrable, puisque toutes mes données perso sont visibles sur mon site (qui contient des balises no-robot) et que je ne communique pas mes infos au monde entier sur le net :)
Je créerai bientôt une page avec password pour protéger mes données privées qui ne regardent que les employeurs potentiels. Vous comprenez ?

Merci pour ces pistes :)
0
bensonn Messages postés 55 Date d'inscription dimanche 24 janvier 2010 Statut Membre Dernière intervention 2 août 2019 4
25 juin 2014 à 18:48
Salut

Merci pour les effets « very cool ». Viens poster sur mon livre d'or !
http://www.helloflash.net/Fichiers/livre-dor.php

Gilles :)
0

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

Posez votre question
Hello again :)

J'ai un ptit problème, c'est que si j'arrive à déclencher mes anims(swf externes) -sans faire appel à alpha, et à les faire apparaitre en cliquant sur les boutons, à chaque fois le son (déposé de la bibliothèque sur une image clé) se lance, dès que l'anim est chargée !

J'ai cherché on the web, sans succès. Voici mes codes :


var hacienda:MovieClip;
var chargeur:Loader = new Loader(); 
chargeur.contentLoaderInfo.addEventListener(Event.COMPLETE, onCompleteHandler);
chargeur.load(new URLRequest("hacienda.swf" )); 

function onCompleteHandler(loadEvent:Event)
{
        hacienda = MovieClip(loadEvent.currentTarget.content); 
       
        hacienda.stop();   // ou hacienda.gotoAndStop(1);  c'est pareil !
}


// et sur image clé as correspondant à mon bouton :
import flash.events.MouseEvent;
porte5.addEventListener(MouseEvent.CLICK, droiteRDC_porte_du_fond_Clicked);
function droiteRDC_porte_du_fond_Clicked(e:MouseEvent):void {
   this.addChild(hacienda);
}



Merci pour ton aide car si les instructions que j'ai trouvées sur le web empêchent l'anim de se lancer visuellement parlant, ellles n'empêchent pas le son de jouer !
Merci pour ton aide :)
0
bizarre ça ne devrait pas...
Où est le son ? S'il est dans le swf externe vous pouvez essayer de mettre en frame 1 ou 2 et avoir un stop en début d'anim.

Pour lancer la lecture il faudra faire un gotoAndPlay(1) ce qui permettras de passer outre le stop sur la première frame(0).
ça reste du bidouillage mais ça marche.

Vous avec aussi stopAllSounds() et je croit aussi qu'on peut cibler un son en particulier tant que celui ci est dans une instance nommée.

Après recherche en AS3 c'est plutôt ça :

If you ever need to stop all the sounds playing in flash using ActionScript3, you can do so using the following method.

First include the SoundMixer class:

import flash.media.SoundMixer;

Then to stop the sounds call the stopAll method:

SoundMixer.stopAll();
0
Bonsoir/Salut!,

Merci pour ces références, ça donne ce que je souhaite... Mais qu'est-ce que c'est long de faire des multi swf imbriqués, waoo...

Je repasserai très certainement poser d'autres questions, une fois que j'en aurai fini avec tout ça! et terminé aussi les dessins qu'il me manque...

Merci pour tes conseils, qui sont appréciés :)
Good night
0