pegase31
Messages postés6138Date d'inscriptiondimanche 21 décembre 2003StatutModérateurDernière intervention 4 septembre 201312 5 sept. 2008 à 14:16
ben le XML reste une base de donnée très accessible .. je m'en sert aussi pour les décors de jeux ...:p
Peg'
cs_ourso
Messages postés92Date d'inscriptionmercredi 11 octobre 2006StatutMembreDernière intervention 5 décembre 2010 5 sept. 2008 à 13:57
je n'ai qu'un mot à dire : Brillant !
cs_Girou
Messages postés1203Date d'inscriptionlundi 10 mars 2003StatutMembreDernière intervention23 juillet 20092 5 sept. 2008 à 13:45
Pour ceux que cela intéresse, la traduction en AS2 de la fonction proposée par Pegase31 donne ceci :
import mx.xpath.XPathAPI;
var data:XML = new XML('<main><media ext="jpg" type="image"/><media ext="jpeg" type="image"/><media ext="png" type="image"/><media ext="flv" type="video"/><media ext="ai" type="null"/><media ext="pdf" type="download_file"/><media ext="mp3" type="musique"/></main>')
function mediaSetter(label:String):String {
var ext:String = label.split(".").pop().toLowerCase();
return(XPathAPI.selectSingleNode(data.firstChild, "/main/media[@ext='"+ext+"']").attributes.type);
}
L'utilisation du XML est une très bonne chose -> possible de charger dynamiquement la liste (donc pas besoin de recompiler si elle évolue) et dans ton idée de base de lancer le lecteur approprié, si celui-ci est aussi défini dans le xml, ou plus simplement défini en fonction du type de media (image -> image.swf) en chargeant dans un container le lecteur swf externe approprié on obtient une solution polyvalente et fortement evolutive sans toucher à l'animation de base.
function loadContent(_lien:String){
var lecteur:String=mediaSetter(_lien)
lecteur+=".swf?_media="+lien;
_container.loadMovie(lecteur)
}
Avantage de la méthode, il suffit d'adapter le XML et de créer les lecteurs 'externes'
@+
Girou
cs_ourso
Messages postés92Date d'inscriptionmercredi 11 octobre 2006StatutMembreDernière intervention 5 décembre 2010 5 sept. 2008 à 13:13
Oui c'est une bonne idée.
Je me suis penché mais pas assez sur l'XML dans as3... juste le loading et le parsage des infos...mais je dois pour mon dev recupérer un flux rss qui va influer sur l'aspect du site, et ton tuto devrait me concerner.
La doc que l'on trouve sur internet n'est pas toujours très limpide, notamment sur les conditions dans lesquelles les différentes utilisations sont recommandées (je parle d'XML list). Parfois en as une se met à faire des méthodes alors qu'elles existent déjà... C'est le problème du mécano !
pegase31
Messages postés6138Date d'inscriptiondimanche 21 décembre 2003StatutModérateurDernière intervention 4 septembre 201312 5 sept. 2008 à 13:06
c'est l'E4X, il s'agit à peu près d'une requête lancée au XML qui ressort une "liste" (un XMLList", en fait) de ce que tu as demandé.
Dans le cas présent, une valeur d'attribut.
Si besoin, je ferais une source exemple de comment gérer ça ... c'est pas très compliqué
Peg'
cs_ourso
Messages postés92Date d'inscriptionmercredi 11 octobre 2006StatutMembreDernière intervention 5 décembre 2010 5 sept. 2008 à 13:05
Il en reste que si je mets tes modifs pegase... Le code n'est plus valable qu'en AS3... Dans ces temps de transitions autant que ça serve au plus grand nombre. Je ne rentre donc pas tes modifs pour la compatibilités mais je vais serieusement envisager ton point de vue pour mes futurs dev !
merci à tous pour votre participation... Donner c'est aussi recevoir !
cs_mouahaha
Messages postés209Date d'inscriptionmercredi 4 août 2004StatutMembreDernière intervention 6 avril 20091 5 sept. 2008 à 12:58
Très intéressante conversation, faut vraiment que je me plonge dans l'AS3, cette façon de gérer le XML a l'air pas mal... Merci Peg !
Et merci Ourso pour ta source ^^
cs_Girou
Messages postés1203Date d'inscriptionlundi 10 mars 2003StatutMembreDernière intervention23 juillet 20092 5 sept. 2008 à 12:27
@Peg' : Y'a des jours ou tu m'énerve :o)
function mediaSetter(label:String):String {
var ext:String = label.split(".").pop(); A PLEURER DE SIMPLICITÉ... qu'est ce que je me suis em... avec des indexof moi
return(data.media.(@ext==ext).@type); Vu ma consommation de XML, faut VRAIMENT que je passe à l'AS3, Xpath pour AS2 c'est bien mais la syntaxe utilisant E4X c'est tout de même autre chose...
}
une remarque cependant : var ext:String = label.split(".").pop() va générer une erreur de compilation sous MTASC (probleme de typage)
alors que var ext:String = label.split(".").pop().toLowerCase() n'en génère pas... étonnant...
Et je ne trouve pas cela spécialement obscure comme notation.
@+
Girou
pegase31
Messages postés6138Date d'inscriptiondimanche 21 décembre 2003StatutModérateurDernière intervention 4 septembre 201312 5 sept. 2008 à 12:20
non, en fait, c'est lors de mon test en XML : le string renvoyé ne peut pas être null s'il ne retrouve pas la référence, il faut le passer "manuellement".
Mais comme je t'ai fait ça "sous le coudee, j'ai confondu.
Peg'
cs_ourso
Messages postés92Date d'inscriptionmercredi 11 octobre 2006StatutMembreDernière intervention 5 décembre 2010 5 sept. 2008 à 12:18
mais pour cette histoire de variable null tu peux m'indiquer ou je peux trouver l'info ?
cs_ourso
Messages postés92Date d'inscriptionmercredi 11 octobre 2006StatutMembreDernière intervention 5 décembre 2010 5 sept. 2008 à 12:17
Disons un peu ésotérique plutôt, obscur c'est moral, t'as raison! C'est une question de préférence ensuite... Sans doute d'expérience aussi. Pour l'instant je préfère voir quelle instruction déconne quand la compilateur m'indique la ligne ou je me suis trompé :D.
pegase31
Messages postés6138Date d'inscriptiondimanche 21 décembre 2003StatutModérateurDernière intervention 4 septembre 201312 5 sept. 2008 à 12:10
obscure ? non, c'est tout à fait faisable et trés simple.
Peg'
cs_ourso
Messages postés92Date d'inscriptionmercredi 11 octobre 2006StatutMembreDernière intervention 5 décembre 2010 5 sept. 2008 à 12:01
Ah ! une string ne peut pas être null en AS3?,mais pourtant, quand je compile cette fonction je ne reçois pas d'erreur...Celui-ci doit transformer la constante en string sinon il se mettrait à sonner non? je n'ai eu le souci ni en AS2 ni en AS3.
sinon le cas du xml à la place du switch me parait très interessante en effet. Tu as juste oublié de passer ta chaine en toLowerCase() pour la rendre compatible avec les extensions. Mais à ce moment il te faut encore rajouter une instruction sur la declaration de "ext" et ça devient peut être un peu obscur... label.split(".").pop().toLowerCase();
pegase31
Messages postés6138Date d'inscriptiondimanche 21 décembre 2003StatutModérateurDernière intervention 4 septembre 201312 5 sept. 2008 à 11:32
J'allais faire la même remarque quand j'ai vu que ce cher Girou avait déjà relevé le soucis ..
Je me permettrais donc de corriger son code comme suit :
var extension:String = nom_media.split(".").pop(); //et ça tiens sur une ligne ;)
il y a une autre erreur dans ton code, mais uniquement en as3 : un String ne peut pas être "null" ...
Mais dans le cas de ce que tu veux faire, plus il y aura de médias et plus le code sera long.
Autant utiliser la puissance du XML dans le cas d'un AS3 comme suit :
function mediaSetter(label:String):String {
var ext:String = label.split(".").pop();
return(data.media.(@ext==ext).@type);
}
voili !
cs_Girou
Messages postés1203Date d'inscriptionlundi 10 mars 2003StatutMembreDernière intervention23 juillet 20092 5 sept. 2008 à 09:30
Salut,
C'est effectivement très utile comme fonction et j'ai développé le même concept que toi dans une application.
Cependant, dans ta fonction je vois un risque de problème : un nom de fichier contenant un point !
media_setter("ma.photo.jpg") va te retourner null et non "image" car splitted[1].toString().toLowerCase() va retourner "photo"
pour contourner ce problème, voici comment j'ai procédé (adapté à ton code) :
var ind:Number = nom_media.lastIndexOf(".");
var extension:String = nom_media.substr(ind + 1);
Ah aussi, dans ta liste de média tu as oublié, entre autre, le mp3 ;o)
5 sept. 2008 à 14:16
Peg'
5 sept. 2008 à 13:57
5 sept. 2008 à 13:45
import mx.xpath.XPathAPI;
var data:XML = new XML('<main><media ext="jpg" type="image"/><media ext="jpeg" type="image"/><media ext="png" type="image"/><media ext="flv" type="video"/><media ext="ai" type="null"/><media ext="pdf" type="download_file"/><media ext="mp3" type="musique"/></main>')
function mediaSetter(label:String):String {
var ext:String = label.split(".").pop().toLowerCase();
return(XPathAPI.selectSingleNode(data.firstChild, "/main/media[@ext='"+ext+"']").attributes.type);
}
L'utilisation du XML est une très bonne chose -> possible de charger dynamiquement la liste (donc pas besoin de recompiler si elle évolue) et dans ton idée de base de lancer le lecteur approprié, si celui-ci est aussi défini dans le xml, ou plus simplement défini en fonction du type de media (image -> image.swf) en chargeant dans un container le lecteur swf externe approprié on obtient une solution polyvalente et fortement evolutive sans toucher à l'animation de base.
function loadContent(_lien:String){
var lecteur:String=mediaSetter(_lien)
lecteur+=".swf?_media="+lien;
_container.loadMovie(lecteur)
}
Avantage de la méthode, il suffit d'adapter le XML et de créer les lecteurs 'externes'
@+
Girou
5 sept. 2008 à 13:13
Je me suis penché mais pas assez sur l'XML dans as3... juste le loading et le parsage des infos...mais je dois pour mon dev recupérer un flux rss qui va influer sur l'aspect du site, et ton tuto devrait me concerner.
La doc que l'on trouve sur internet n'est pas toujours très limpide, notamment sur les conditions dans lesquelles les différentes utilisations sont recommandées (je parle d'XML list). Parfois en as une se met à faire des méthodes alors qu'elles existent déjà... C'est le problème du mécano !
5 sept. 2008 à 13:06
Dans le cas présent, une valeur d'attribut.
Si besoin, je ferais une source exemple de comment gérer ça ... c'est pas très compliqué
Peg'
5 sept. 2008 à 13:05
merci à tous pour votre participation... Donner c'est aussi recevoir !
5 sept. 2008 à 12:58
Et merci Ourso pour ta source ^^
5 sept. 2008 à 12:27
function mediaSetter(label:String):String {
var ext:String = label.split(".").pop(); A PLEURER DE SIMPLICITÉ... qu'est ce que je me suis em... avec des indexof moi
return(data.media.(@ext==ext).@type); Vu ma consommation de XML, faut VRAIMENT que je passe à l'AS3, Xpath pour AS2 c'est bien mais la syntaxe utilisant E4X c'est tout de même autre chose...
}
une remarque cependant : var ext:String = label.split(".").pop() va générer une erreur de compilation sous MTASC (probleme de typage)
alors que var ext:String = label.split(".").pop().toLowerCase() n'en génère pas... étonnant...
Et je ne trouve pas cela spécialement obscure comme notation.
@+
Girou
5 sept. 2008 à 12:20
Mais comme je t'ai fait ça "sous le coudee, j'ai confondu.
Peg'
5 sept. 2008 à 12:18
5 sept. 2008 à 12:17
5 sept. 2008 à 12:10
Peg'
5 sept. 2008 à 12:01
sinon le cas du xml à la place du switch me parait très interessante en effet. Tu as juste oublié de passer ta chaine en toLowerCase() pour la rendre compatible avec les extensions. Mais à ce moment il te faut encore rajouter une instruction sur la declaration de "ext" et ça devient peut être un peu obscur... label.split(".").pop().toLowerCase();
5 sept. 2008 à 11:32
Je me permettrais donc de corriger son code comme suit :
var extension:String = nom_media.split(".").pop(); //et ça tiens sur une ligne ;)
il y a une autre erreur dans ton code, mais uniquement en as3 : un String ne peut pas être "null" ...
Mais dans le cas de ce que tu veux faire, plus il y aura de médias et plus le code sera long.
Autant utiliser la puissance du XML dans le cas d'un AS3 comme suit :
var data:XML =
<main>
<media ext="jpg" type="image"/>
<media ext="jpeg" type="image"/>
<media ext="png" type="image"/>
<media ext="flv" type="video"/>
<media ext="ai" type="null"/>
<media ext="pdf" type="download_file"/>
<media ext="mp3" type="musique"/>
</main>
function mediaSetter(label:String):String {
var ext:String = label.split(".").pop();
return(data.media.(@ext==ext).@type);
}
voili !
5 sept. 2008 à 09:30
C'est effectivement très utile comme fonction et j'ai développé le même concept que toi dans une application.
Cependant, dans ta fonction je vois un risque de problème : un nom de fichier contenant un point !
media_setter("ma.photo.jpg") va te retourner null et non "image" car splitted[1].toString().toLowerCase() va retourner "photo"
pour contourner ce problème, voici comment j'ai procédé (adapté à ton code) :
var ind:Number = nom_media.lastIndexOf(".");
var extension:String = nom_media.substr(ind + 1);
Ah aussi, dans ta liste de média tu as oublié, entre autre, le mp3 ;o)
@+
Girou