Petite aide sur un morceau de code

Résolu
Carlatocer Messages postés 4 Date d'inscription mardi 28 mars 2006 Statut Membre Dernière intervention 25 janvier 2008 - 22 janv. 2008 à 16:00
Carlatocer Messages postés 4 Date d'inscription mardi 28 mars 2006 Statut Membre Dernière intervention 25 janvier 2008 - 25 janv. 2008 à 08:16
J'ai besoin d'une petit aide sur un assemblage de code.

Effectivement, il y a quelques temps, j'ai décidé de crée un petit lecteur video, avec des miniatures des photos.
Pour ce faire, j'ai pris 2 code trouver sur le net, et je les ait assembler.

J'ai pris un lecteur de video, classique avec 5 bouton chargant des xml avec des videos divers. Ainsi qu'un diaporama photo, avec des miniatures defilant a droite de mon écrans.

Vous avez compris ce que je veux faire, je pense. C'est faire un lecteur video avec les 5 boutons de chargement xml (catégorie), avec les miniatures de chaque video des catégories, dans les miniatures.

Le probléme qui se pose a moi, et la compréhension du code. Voila le morceaux de code que je ne comprend pas.

code diaporama :

//ici on donne la vitesse du mouvement par rapport à la souris
//_root.taille_scene/2 étant le milieu de la scène, là où la vitesse est la plus faible
this.onMouseMove = function() {
    this.vitesseMenu = Math.round(-(this._ymouse-_parent.taille_scene/2)/20);
    this.pos_souris = this._xmouse;
    //trace(this.vitesseMenu);
};
// c'est Math.round qui va éviter le décalage
//et le tremblement des images
//car il arrondit les valeurs

setMenu = function (FileXML) {
    largeurBouton = 77;
    for (var n = 0; n<FileXML.childNodes.length; n++) {
    //for (var n = FileXML.childNodes.length; n>0; n--) {
        var Name = "bouton"+n;
        //on duplique le bouton qui va contenir les images
        var btn = attachMovie ("BTN_miniature", Name, n);
        btn._y = n*largeurBouton;
        //on lui attribue les chemins correspondants du fichier xml
        btn.urlimage_min = FileXML.childNodes[n].attributes.urlimage_min;
        btn.numero=n;
    }
    decalage = n*largeurBouton;
};

Ce code et trés simple et je le comprend assez facilement, la seul chose que je ne comprend pas. C'est le faite, que lorsque je click sur un clip "bouton" crée. Il m'ouvre une url inéxistante. Voici le contenu du xml :

<?xml version="1.0" encoding="UTF-8"?>
<content>
<films titre="la lettre" auteur="Ronan Luce" video="http://74.125.13.33/get_video?video_id=YcLdZVOhZe8&origin=lax-v126.lax.youtube.com" copyright="Ronan Luce" lien="" miniature="" urlimage_min="photos/Disneyland_Pirates des caraibes/mini/IMG_1016.jpg"/>
</content>

Ici j'ai mis qu'une balise 'film' avec des url et info sur la video. Avec un attribut urlimage_min qui me sert pour les miniatures.

Voici maintenant l'erreur afficher lors d'un click sur un clip "bouton" des miniatures.

Error opening URL "file:///F|/h/undefined"

Es que quelqu'un a une idée de cette erreur ?

4 réponses

nickydaquick Messages postés 416 Date d'inscription vendredi 31 janvier 2003 Statut Membre Dernière intervention 19 décembre 2013 3
24 janv. 2008 à 20:52
Salut,

1- selon ton format de fichier xml , tu as 2 noeuds racines:
    - le premier = <?xml version="1.0" encoding="UTF-8"?>
    - le second = <content>.....</content>
so lorsque tu lui pasde directement fileXml.firstChild sans meme verifier c'est koi que tu lui passes , automatiquement dans ta boucle la variable childNodes = undefined, tu es chanceux de ne pas faire de boucle infinie.

2- oui il s'agit d'un apppel asynchrone , mais tu peux rajouter dynamiquement une methode a l'objet cree via attachMovie
soit var btn:MovieClip = attachMovie(linkageID,name,depth,init)
tu lui sors alors
btn.onRelease = function()
{
......
}
mais selon ce que tu as dit plus haut tu as deja cette methode so utilise onEnterFrame
btn.onEnterFrame = function()
{
    //initialise ta variable qui load l'URL lors du onPress ou du onRelease
    delete this.onEnterFrame;
}

3- pour le code sur le clip des boutons soit tu utilises le onRelease(ou le onPress) dans le (2-) directement dans le movieclip , ou tu le tapes en actionscript dans la boucle comme j'ai fait la.
le fait de t'ouvrir une URL suggere que la variable urlimage_min est deja definie dans le movieclip , so utilise le onEnterframe pour t'assurer sa mise a jour. (c'est aussi valable pour les appels de fonctions apres un attachMovie)

resume:
1- pour ton xml ,
if(FileXML==null || !FileXML.hasChildNodes())return;
slider.setMenu(fileXML.childNodes[fileXML.childNodes.length-1]);

2- dans ta boucle utlise plutot
setMenu = function(FileXML_firstChild:XMLNode)
var node:XMLNode = FileXML_firstChild;
var btn:MovieClip = null;
var n:Number = 0;
while(node!=null)
{
    btn = attachMovie ("BTN_miniature", String("bouton"+n), n,{_y:n*77});
    ++n;
   btn.onEnterFrame = function()
    {
        this.urlimage_min = node.attributes.urlimage_min;
        delete this.onEnterFrame;
    }
    node = node.nextSibling;
}

si jamais tu as des pbs, envoie moi ton fla , je le modifie pour toi avec un code clair et commente, pour que tu suive le cheminement ( qui pourrait etre dans un futur proche une maniere de voir les choses en actionscript desormais)

je suis heureux de faire partie d'une grande famille ...!
3
nickydaquick Messages postés 416 Date d'inscription vendredi 31 janvier 2003 Statut Membre Dernière intervention 19 décembre 2013 3
22 janv. 2008 à 17:42
Salut,

1- Comment que tu charges ton xml, et dans kele variable?FileXML est-il de type XML?si oui, est le document , ou est-ce un noeud?
2- tu fais un attachMovie et tout de suite apres tu set des variables , fais attention car le attachMovie est lui aussi un appel asynchrone.
3- c koi le code sur les boutons que tu load?

pourrais-tu nous eclaircir ce 3 points, pour un peu nous aider a t'aider?
merci

je suis heureux de faire partie d'une grande famille ...!
0
Carlatocer Messages postés 4 Date d'inscription mardi 28 mars 2006 Statut Membre Dernière intervention 25 janvier 2008
24 janv. 2008 à 17:03
1 : Alors je charge le xml avec ce bout de code :

var friseXML = new XML();
friseXML.ignoreWhite = true;
friseXML.onLoad = function(sucess) {
 if (sucess) {
  this.play();
  slider.setMenu(this.firstChild);
  delete friseXML;
 }
};
// ne marche pas en local
// supprimer ?time...
friseXML.load("XML_/xml_example.xml");//?time="+Math.random());

C'est le noeud qui est chargé, comme ta pu remarquer

2 : Le probleme de l'asynchronisation et trés importante ici ?

3 : En fait les boutons clip minituare, sont crée lors du chargement du xml, et ce que je cherche a définir, c'est quel bout de code va me permettre de definir une action, lorsque l'on va cliquer sur une miniature. es onPress ?? si oui, ou dois je mettre le code ?? etc...
0
Carlatocer Messages postés 4 Date d'inscription mardi 28 mars 2006 Statut Membre Dernière intervention 25 janvier 2008
25 janv. 2008 à 08:16
Merci pour tout encore... J'ai toute les réponses que j'attendais. Je te remercie encore mille fois.

Si un jour tu a besoin d'aide, je ferais de mon possible pour résoudre tes problèmes.

A bientot et bonne continuation
0
Rejoignez-nous