Précédent   Forum des professionnels en informatique > Webmasters - Développement Web > Flash/Flex > Flash > AS3
AS3 Questions relatives à la programmation ActionScript 3 (Cours AS3)
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 16/04/2011, 14h40   #1
Membre du Club
 
Inscription : juillet 2006
Messages : 246
Détails du profil
Informations forums :
Inscription : juillet 2006
Messages : 246
Points : 50
Points : 50
Par défaut MASAPI - Vérifier si un fichier est chargé

Bonjour à tous et merci d'avance pour votre aide.

Je télecharge plusieurs fichiers avec Maspai et j'aimerais tout simplement effectuer un if pour savoir si tels ou tels fichier et chargé.
J'ai consulté le wiki masapi, mais ça ne m'aide pas trop.

Code :
1
2
3
4
5
6
7
8
9
10
11
 
import ch.capi.net.*; 
 
var cml:CompositeMassLoader = new CompositeMassLoader(); 
for(var v:uint=1;v<29;v++) 
{
	cml.addFile("images/"+v+".jpg");
} 
cml.start(); 
 
if...
http://code.google.com/p/masapi/w/list
Merci d'avance de votre aide.
Rifton007 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/04/2011, 15h34   #2
Membre Expert
 
Avatar de Madfrix
 
Inscription : juin 2007
Messages : 2 278
Détails du profil
Informations personnelles :
Localisation : France, Gironde (Aquitaine)

Informations forums :
Inscription : juin 2007
Messages : 2 278
Points : 2 324
Points : 2 324
Bonjour,

dans la doc que tu nous fournis et notamment ici tu as des infos concernant les fichiers déjà chargés. Ils se trouvent dans l'Array filesSuccess
__________________
Je ne réponds pas aux questions envoyées par mp
Madfrix est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/04/2011, 15h46   #3
Membre du Club
 
Inscription : juillet 2006
Messages : 246
Détails du profil
Informations forums :
Inscription : juillet 2006
Messages : 246
Points : 50
Points : 50
Je t'assure que j'ai essayé avec filesSuccess dans un trace.
Et j'obtient juste des retour à la ligne.

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
 
import ch.capi.net.*; 
import ch.capi.events.*; 
 
var cml:CompositeMassLoader = new CompositeMassLoader(); 
cml.massLoader.addEventListener(ProgressEvent.PROGRESS, onProgress); 
for(var v:uint=1;v<29;v++) 
{
	cml.addFile("images/"+v+".jpg");
} 
 
cml.start(); 
 
function onProgress(evt:ProgressEvent):void {         
var info:ILoadInfo = evt.target.loadInfo;         
//var info:ILoadInfo = cml.loadInfo;                 
 trace(info.filesSuccess);         
}
Rifton007 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/04/2011, 16h30   #4
Membre Expert
 
Avatar de Madfrix
 
Inscription : juin 2007
Messages : 2 278
Détails du profil
Informations personnelles :
Localisation : France, Gironde (Aquitaine)

Informations forums :
Inscription : juin 2007
Messages : 2 278
Points : 2 324
Points : 2 324
Que retourne

Code :
1
2
 
trace(String(info.filesSuccess.length));
?
__________________
Je ne réponds pas aux questions envoyées par mp
Madfrix est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/04/2011, 02h58   #5
Membre du Club
 
Inscription : juillet 2006
Messages : 246
Détails du profil
Informations forums :
Inscription : juillet 2006
Messages : 246
Points : 50
Points : 50
Cela me donne une série de 0, l'un en dessous de l'autre.
Est le nombre de 0 dépasse le nombre total de fichier copié, donc je ne comprend pas.
Rifton007 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/04/2011, 10h06   #6
Membre Expert
 
Avatar de Madfrix
 
Inscription : juin 2007
Messages : 2 278
Détails du profil
Informations personnelles :
Localisation : France, Gironde (Aquitaine)

Informations forums :
Inscription : juin 2007
Messages : 2 278
Points : 2 324
Points : 2 324
Je comprends pas trop ta logique, tu essayes de charger en mass des fichiers se trouvant dans ton projet ?

Code :
1
2
 
cml.addFile("images/"+v+".jpg");
Ce n'est pas des fichiers distants ca...
__________________
Je ne réponds pas aux questions envoyées par mp
Madfrix est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/04/2011, 12h19   #7
Membre du Club
 
Inscription : juillet 2006
Messages : 246
Détails du profil
Informations forums :
Inscription : juillet 2006
Messages : 246
Points : 50
Points : 50
Et bien ces fichiers ne sont pas dans ma biblio, ni sur scéne.
Ils sont chargé depuis le dossier images qui se trouve sur mon serveur.

image 1: un preaload du swf
image 2: on entre dans le site avec thumbnail des 28 images.
image 2: AS massload des 28 images

Et en cliquant sur l'un des thumbnail, un if afin de vérifier si l'image lié au thumbnail est chargé ou pas encore.

Merci de ton aide encore
Rifton007 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/04/2011, 15h18   #8
Membre Expert
 
Avatar de Madfrix
 
Inscription : juin 2007
Messages : 2 278
Détails du profil
Informations personnelles :
Localisation : France, Gironde (Aquitaine)

Informations forums :
Inscription : juin 2007
Messages : 2 278
Points : 2 324
Points : 2 324
Tu as essayé quelque chose comme ca ?


Code :
1
2
 
cml.addFile(URL_DE_TON_SERVEUR + "images/"+v+".jpg");
__________________
Je ne réponds pas aux questions envoyées par mp
Madfrix est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/04/2011, 20h16   #9
Membre du Club
 
Inscription : juillet 2006
Messages : 246
Détails du profil
Informations forums :
Inscription : juillet 2006
Messages : 246
Points : 50
Points : 50
Je ne pense pas que le probléme soit lié à cela.
Mais j'ai tout de même essayé et ça donne le même résultat.

J'ai juste oublier d'ajouter que le téléchargement des fichiers ce déroule parfaitement. Mon seul probléme est de confirmer si oui ou non le fichier et telecharger.

Encore merci du temps que tu m'accorde.
Rifton007 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/04/2011, 20h21   #10
Membre Expert
 
Avatar de Madfrix
 
Inscription : juin 2007
Messages : 2 278
Détails du profil
Informations personnelles :
Localisation : France, Gironde (Aquitaine)

Informations forums :
Inscription : juin 2007
Messages : 2 278
Points : 2 324
Points : 2 324
Peux tu montrer l'état actuel de ton code stp ?
__________________
Je ne réponds pas aux questions envoyées par mp
Madfrix est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/04/2011, 22h59   #11
Membre du Club
 
Inscription : juillet 2006
Messages : 246
Détails du profil
Informations forums :
Inscription : juillet 2006
Messages : 246
Points : 50
Points : 50
Je pense avoir réussi un bout de chemin, voici:

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
 
import ch.capi.net.*; 
 
var cml:CompositeMassLoader = new CompositeMassLoader(); 
 
for(var v:uint=1;v<29;v++) 
{
	//cml.addFile("images/"+v+".jpg");
	var file:ILoadableFile = cml.addFile("images/"+v+".jpg", LoadableFileType.BINARY);
} 
 
cml.start(); 
 
T1.addEventListener(MouseEvent.CLICK ,Block_click );
function Block_click(evt:MouseEvent):void{
 
//var ld2:Loader = file.getData("flash.display.Loader");
//this.addChild (ld2); ld2.x = 0 ; ld2.y = 0;
 
var infos:ILoadInfo = cml.massLoader.loadInfo;
trace(infos.filesSuccess);
}
Et en trace j'obtient donc:

Code :
1
2
 
images/1.jpg (binary),images/2.jpg (binary),images/3.jpg (binary),images/4.jpg (binary),images/5.jpg (binary),images/6.jpg (binary),images/7.jpg (binary),images/8.jpg (binary),images/9.jpg (binary),images/10.jpg (binary),images/11.jpg (binary),images/12.jpg (binary),images/13.jpg (binary),images/14.jpg (binary),images/15.jpg (binary),images/16.jpg (binary),images/17.jpg (binary),images/18.jpg (binary),images/19.jpg (binary),images/20.jpg (binary),images/21.jpg (binary),images/22.jpg (binary),images/23.jpg (binary),images/24.jpg (binary),images/25.jpg (binary),images/26.jpg (binary),images/27.jpg (binary),images/28.jpg (binary)
Donc à mon sens, je devrais faire un if afin de retrouver dans le string si tels ou tels fichier est chargé ou pas. Je trouve cette méthode un peu bricolo mais je n'ai trouvé que ça.
Rifton007 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/04/2011, 23h46   #12
Membre Expert
 
Avatar de Madfrix
 
Inscription : juin 2007
Messages : 2 278
Détails du profil
Informations personnelles :
Localisation : France, Gironde (Aquitaine)

Informations forums :
Inscription : juin 2007
Messages : 2 278
Points : 2 324
Points : 2 324
tu peux tester l'existence d'une valeur dans un tableau avec indexOf() :

Code :
1
2
3
 
if(infos.filesSuccess.indexOf("fichier1") != -1)
   trace("fichier1 chargé");
__________________
Je ne réponds pas aux questions envoyées par mp
Madfrix est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/04/2011, 00h19   #13
Membre du Club
 
Inscription : juillet 2006
Messages : 246
Détails du profil
Informations forums :
Inscription : juillet 2006
Messages : 246
Points : 50
Points : 50
J'aurais tant voulu te dire que ça marche enfin et de ne plus abusé de ton précieux temps.
J'ai essayé avec indexOf("22"), indexOf(22), indexOf("images22.jpg") et j'en passe, mais le résultat est nul.

J'ai même été voir là http://livedocs.adobe.com/flash/9.0_...html#indexOf()

Mais sans résultat.
Encore merci
Rifton007 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/04/2011, 08h55   #14
Membre Expert
 
Avatar de Madfrix
 
Inscription : juin 2007
Messages : 2 278
Détails du profil
Informations personnelles :
Localisation : France, Gironde (Aquitaine)

Informations forums :
Inscription : juin 2007
Messages : 2 278
Points : 2 324
Points : 2 324
Citation:
Envoyé par Rifton007 Voir le message
Jet j'en passe
y compris "images/22.jpg" par exemple ?
__________________
Je ne réponds pas aux questions envoyées par mp
Madfrix est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/04/2011, 10h01   #15
Membre du Club
 
Inscription : juillet 2006
Messages : 246
Détails du profil
Informations forums :
Inscription : juillet 2006
Messages : 246
Points : 50
Points : 50
Oui ça aussi j'avais essayé, mais rien.

J'ai même tenter un push sur infos.filesSuccess.
Ensuite récuperer ce push avec indexOf, non plus rien.
Il semblerait même qu'il ne s'ajoute même pas.

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
 
T1.addEventListener(MouseEvent.CLICK ,Block_click );
function Block_click(evt:MouseEvent):void{
 
//var ld2:Loader = file.getData("flash.display.Loader");
//this.addChild (ld2); ld2.x = 0 ; ld2.y = 0;
 
//var arry_test:Array = new Array();
//arry_test.push("bonjour");
//if(arry_test.indexOf("bonjour") != -1)
//trace("arry_test: bonjour ok");
 
var infos:ILoadInfo = cml.massLoader.loadInfo;
//infos.filesSuccess.push("bonjour");
trace (infos.filesSuccess)
if(infos.filesSuccess.indexOf("images/22.jpg ") != -1)
   trace("filesSuccess: ok");
}
Rifton007 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/04/2011, 10h42   #16
Membre Expert
 
Avatar de Madfrix
 
Inscription : juin 2007
Messages : 2 278
Détails du profil
Informations personnelles :
Localisation : France, Gironde (Aquitaine)

Informations forums :
Inscription : juin 2007
Messages : 2 278
Points : 2 324
Points : 2 324
Avec les events MassLoadEvent.FILE_OPEN et MassLoadEvent.FILE_CLOSE tu dois pouvoir arriver je pense à voir quel fichier commence à être chargé et quel fichier vient de finir de charger (en échec ou succès). Tu peux déjà essayer de regarder si ces events marchent juste pour tester

Si ca marche, tu auras déjà une base assez fiable sur les fichiers chargés.

Si j'ai le temps, je vais essayer d'utiliser un peu masapi, je connais pas
__________________
Je ne réponds pas aux questions envoyées par mp
Madfrix est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/04/2011, 12h27   #17
Membre Expert
 
Avatar de Madfrix
 
Inscription : juin 2007
Messages : 2 278
Détails du profil
Informations personnelles :
Localisation : France, Gironde (Aquitaine)

Informations forums :
Inscription : juin 2007
Messages : 2 278
Points : 2 324
Points : 2 324
Après quelques tests...

l'événement ProgressEvent.PROGRESS sur cml me semble pas être la bonne solution pour détecter les fichiers chargés car cet événement ne semble pas se déclencher sur le 100% de chargement du fichier en question. Donc, si tu charges 2 fichiers ce tableau aura maximum une taille de 1 et le premier fichier apparait une fois le second fichier en cours de chargement.

Par contre, j'ai fais un petit programme qui écoute pour chaque fichier les events Event.OPEN et Event.CLOSE et ca marche pas mal

Voici le script (Flex à remettre en Flash facilement) :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
 
<?xml version="1.0"?>
<!-- styles/TypeSelector.mxml -->
<s:Application 
	xmlns:fx="http://ns.adobe.com/mxml/2009" 
	xmlns:mx="library://ns.adobe.com/flex/mx" 
	xmlns:s="library://ns.adobe.com/flex/spark"
	xmlns:as3="as3.*" creationComplete="load()">
 
	<fx:Script>
		<![CDATA[
			import ch.capi.events.MassLoadEvent;
			import ch.capi.net.CompositeMassLoader;
			import ch.capi.net.ILoadInfo;
			import ch.capi.net.ILoadableFile;
			import ch.capi.net.IMassLoader;
			import ch.capi.net.LoadableFileType;
 
			private var _cml:CompositeMassLoader;
 
			private function load():void
			{
				_cml = new CompositeMassLoader();
				_cml.massLoader.addEventListener(Event.COMPLETE, onCmlComplete);
 
				ajouteFichiers([
						{fichier:"http://localhost/fichier1.txt", type:LoadableFileType.TEXT},
						{fichier:"http://localhost/fichier2.txt", type:LoadableFileType.TEXT},
						{fichier:"http://localhost/fichier3.txt", type:LoadableFileType.TEXT}
						]);
 
				_cml.start();
 
			}
 
			protected function ajouteFichiers(fichiers:Array):void
			{
				var file:ILoadableFile;
 
				for each(var o:Object in fichiers)
				{
					file = _cml.addFile(o.fichier, o.type);
					file.addEventListener(SecurityErrorEvent.SECURITY_ERROR, handleSecurityError);
					file.addEventListener(IOErrorEvent.IO_ERROR, handleIOError);
					file.addEventListener(Event.OPEN, handleOpen);
					file.addEventListener(Event.COMPLETE, handleComplete);
				}
			}
 
			protected function handleSecurityError(e:SecurityErrorEvent):void
			{
				ta.text += "SecurityErrorEvent sur : " + (e.target as ILoadableFile).urlRequest.url + "\n";
			}
 
			protected function handleIOError(e:IOErrorEvent):void
			{
				ta.text += "IOError sur : " + (e.target as ILoadableFile).urlRequest.url + "\n";
			}		
 
			protected function handleOpen(e:Event):void
			{
				ta.text += (e.target as ILoadableFile).urlRequest.url + " lancé \n";	
			}
 
			protected function handleComplete(e:Event):void
			{
				ta.text += (e.target as ILoadableFile).urlRequest.url + " chargé \n";	
			}
 
			protected function onCmlComplete(e:Event):void
			{
				ta.text += "Fini ! \n";
				ta.text += "Fichiers dans le tableau filesSuccess : \n\n";
 
				for each(var file:ILoadableFile in _cml.massLoader.loadInfo.filesSuccess)
					ta.text += "\t" + file.urlRequest.url + "\n";
			}
 
		]]>
	</fx:Script>
 
 
 
	<s:TextArea id="ta" width="200" height="500" />
 
 
 
</s:Application>

Résultat :

__________________
Je ne réponds pas aux questions envoyées par mp
Madfrix est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/04/2011, 00h39   #18
Membre du Club
 
Inscription : juillet 2006
Messages : 246
Détails du profil
Informations forums :
Inscription : juillet 2006
Messages : 246
Points : 50
Points : 50
Cela ma fort touché que tu aies pris la peine de faire ce code.
Trés sincérement, merci.

Ton code fonctionne du tonnere.
Mais je n'y comprend plus rien, même ainsi impossible de savoir si oui on non le fichier est chargé.

Les écouteurs sont tous OK.
Si je fais un trace sur _cml.massLoader.loadInfo.filesSuccess, c'est OK ausi.
Par contre le faire anisi impossible:
Code :
1
2
3
4
5
6
 
T1.addEventListener(MouseEvent.CLICK ,Block_click );
function Block_click(evt:MouseEvent):void{
if(_cml.massLoader.loadInfo.filesSuccess.indexOf("images/1.jpg") != -1)
   trace("OK 1.jpg");
}
Tu utilise quel version de Masapi ?
Moi j'ai la Masapi 2.0 r173.

Pourquoi je chercher à faire ce code?
Le visiteur clique sur l'un des buttons (28 au total) qui execute un son et une animation.
Mais si je n'arrive pas à faire un indexOf avant les effets, ils s'éxecutent mais l'image n'apparait qu'aprés.

Encore merci,
Et je m'excuse encore une fois de te retenir sur ce probléme.
Rifton007 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/04/2011, 07h20   #19
Membre du Club
 
Inscription : avril 2011
Messages : 58
Détails du profil
Informations forums :
Inscription : avril 2011
Messages : 58
Points : 56
Points : 56
désolé de m'incruster dans une conversation déjà bien avancée. Mais j'ai une question. Dans ce code, pourquoi met-tu cette fonction trace sur un évènement click ? tu passe tes tests à cliquer comme un malade pour être sûr de ne pas rater le trace d'un chargement ? Ca me paraitrait plus logique d'utiliser un event oncomplete non ?

Code :
1
2
3
4
5
6
7
 
T1.addEventListener(MouseEvent.CLICK ,Block_click );
function Block_click(evt:MouseEvent):void{
 
var infos:ILoadInfo = cml.massLoader.loadInfo;
trace(infos.filesSuccess);
}
Sinon pour les chargement en masse il existe une libraire chez greensock. Je ne l'ai pas utilisée mais je fait confiance à 100% à Jack qui est un excellent developpeur flash.
bokan est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/04/2011, 10h04   #20
Membre Expert
 
Avatar de Madfrix
 
Inscription : juin 2007
Messages : 2 278
Détails du profil
Informations personnelles :
Localisation : France, Gironde (Aquitaine)

Informations forums :
Inscription : juin 2007
Messages : 2 278
Points : 2 324
Points : 2 324
Bonjour,

Citation:
Envoyé par Rifton007 Voir le message
Tu utilise quel version de Masapi ?
Moi j'ai la Masapi 2.0 r173.
j'utilise la même version.

Ce que j'essaie de te faire comprendre, c'est qu'il vaut mieux éviter de faire appel à filesSuccess pendant le traitement des fichiers car à mon avis, tu y feras appel dans l'event ProgressEvent.PROGRESS or un fichier sera placé dans filesSuccess je pense sur l'event Event.COMPLETE qui sera appelé après ProgressEvent.PROGRESS (logique). Du coup, si tu as 10 fichiers, je pense que tu verras un length de filesSuccess valant au maximum 9 sur l'événement ProgressEvent.PROGRESS.

A mon avis et c'est ce que je te propose dans le code, il vaut mieux utiliser un event Event.OPEN et Event.COMPLETE sur chaque fichier pour avoir le traitement "en temps réel".

Un event Event.COMPLETE sur le massLoader quand à lui te permettra de savoir quand tous tes chargements seront complétés (en succès ou échec) et ton fameux tableau filesSuccess sera accessible et complet si tu veux itérer dessus.

PS: lors de tes tests, je te voyais essayer d'insérer des éléments dans filesSuccess. A priori, tu ne peux pas il est en lecture seule.


@bokan : pas de soucis le forum est un lieu d'échanges
__________________
Je ne réponds pas aux questions envoyées par mp
Madfrix est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 03h27.


 
 
 
 
Partenaires

Hébergement Web