Contrôle de plusieurs vidéos - AS 3.0

cs_phobus Messages postés 8 Date d'inscription mardi 13 avril 2004 Statut Membre Dernière intervention 28 avril 2009 - 27 avril 2009 à 23:13
cs_phobus Messages postés 8 Date d'inscription mardi 13 avril 2004 Statut Membre Dernière intervention 28 avril 2009 - 28 avril 2009 à 14:27
Salut à tous,

Voici mon problème :

Je dois réaliser une animation flash sur la base d'une vidéo en green key (donc détourée et importée dans flash avec couche alpha).
Dans cette vidéo, le protagoniste désigne du doigt quatre vignettes (boutons). Chacune de ces vignettes est un lien vers une vidéo correspondant à un thème particulier.
Une fois la vidéo de présentation des vignettes terminée, elle cède la place à une vidéo "d'attente" dans lequel la personne regarde distraitement à gauche et à droite, avant d'inviter l'utilisateur à cliquer sur une vignette s'il n'a pas encore tout visionné.


Pour gérer cela, étant débutant en actionscript, j'ai téléchargé le script


"ENCHAINEMENT FLV SANS XML PAR BOUTON AVEC FULLSCREEN+FLVPLAYBACK UNIQUE+AS3"


sur Flashkod (http://www.flashkod.com//code.aspx?ID=45710) qui m'a permis, jusqu'à présent, d'afficher toutes les vidéos.

J'ai donc inséré un autre



FLVPlayback (nommé "mainvid") qui lance

automatiquement la lecture de la vidéo de présentation et affiche ensuite la vidéo d'attente

Malheureusement, j'ai un souci :

1°) Je souhaiterais qu'après chaque capsule vidéo (vidéos accessibles depuis les vignettes) se lance automatiquement la vidéo "d'attente". Dans le source téléchargé (en actionscript 3.0), chaque bouton "vignette" appelle une fonction de correspondant à la capsule que l'on veut visionner. Voici une partie du code :

mainvid.play("flv/presentation_vignettes.flv")

but1.addEventListener(MouseEvent.CLICK, c1);

function c1 (pEvt:Event):void
{   
    player.visible=true; // player est le FLVPlayback des vidéos "capsule" donc des vidéos accessibles par les vignettes
    mainvid.visible=false; // mainvid est le FLVPlayback de la vidéo de présentation et de la vidéo d'attente qu'on arrête pour lancer la capsule sélectionnée.
    mainvid.stop();
    player.play("flv/capsule1.flv");
  }
mainvid.addEventListener("complete", attente);
function attente (pEvt:Event):void
{
    mainvid.play("flv/attente.flv");
}

Comment peut-on, à partir de la fonction c1, détecter la fin de la vidéo du composant "player" et commander la lecture de celle du composant "mainvid" via la fonction attente

Quelqu'un peut-il m'aider sivoplé ?

8 réponses

cs_Girou Messages postés 1203 Date d'inscription lundi 10 mars 2003 Statut Membre Dernière intervention 23 juillet 2009 2
28 avril 2009 à 11:59
Bonjour,

pas sur que ca va aider, mais utilise plutot les constantes pour les Event video (comme tu le fais pour MouseEvent)

mainvid.play("flv/presentation_vignettes.flv")

but1.addEventListener(MouseEvent.CLICK, c1);

function c1 (pEvt:
MouseEvent
):void
{   
    player.visible=true; // player est le FLVPlayback des vidéos "capsule" donc des vidéos accessibles par les vignettes
   
mainvid.visible=false; // mainvid est le FLVPlayback de la vidéo de
présentation et de la vidéo d'attente qu'on arrête pour lancer la
capsule sélectionnée.
    mainvid.stop();
    player.play("flv/capsule1.flv");
  }
//mainvid.addEventListener("complete", attente);

player
.addEventListener(videoEvent.COMPLETE, attente);

function attente (pEvt:videoEvent):void
{
    mainvid.play("flv/attente.flv");
}

@+
0
cs_phobus Messages postés 8 Date d'inscription mardi 13 avril 2004 Statut Membre Dernière intervention 28 avril 2009
28 avril 2009 à 12:17
J'ai fait la modif.

C'est certainement meilleur au niveau du code, mais malheureusement, ça ne résout pas mon problème.
A la compilation, Flash me dit : "TypeError: Error #1010: Un terme n'est pas défini et n'a pas de propriété."

J'imagine que cela est dû au fait qu'il ne reconnait pas le composant player en dehors de des fonctions dans lesquelles il est utilisé. Je ne parviens pas à trouver un moyen pour que player soit également accessible en dehors de ces fonctions "boutons".

D'autres idées ?
0
cs_Girou Messages postés 1203 Date d'inscription lundi 10 mars 2003 Statut Membre Dernière intervention 23 juillet 2009 2
28 avril 2009 à 12:25
player.visible=true





tu as bien défini une variable




player




avant le bourt de code que tu nous propose, ou bien c'est une référence direct au nom d'occurence de ton FLVPlayback ?













@+
0
cs_phobus Messages postés 8 Date d'inscription mardi 13 avril 2004 Statut Membre Dernière intervention 28 avril 2009
28 avril 2009 à 12:57
Merci de tes réponses !

En fait, le code que j'ai posté se trouve dans le calque "boutons".

Dans un autre calque, appellé player, se trouve ce que je pense être la définition de player ainsi que des paramètres concernant sa position x et y, sa taille et d'autres paramètre comme addchild(player) (et celui là, j'avoue que je n'y comprends rien, même après avoir consulté l'aide de Flash).

Voici le code en question :

//on importe la classe fl.video.*
//pour la prise en charge des attributs vidéo
import fl.video.*;
//création de l'objet flvplayback
var player = new FLVPlayback();
//emplacement du player
player.x = 10;
player.y = 10;
//dimension du player
player.width = 320;
player.height = 280;
//generation de l'occurence 'player' pour l'actionscript
addChild(player);
//skin du player
//(il doit etre exporter ou coller dans le meme repertoire
player.skin = "SkinUnderAll.swf"
//skin disparait= vrai-faux(true,false)
player.skinAutoHide= true;
//player demarre = vrai-faux(true,false)
player.autoPlay= false;
//player visible = vrai-faux(true,false)
player.visible=false;

A noter cependant que le composant mainvid que j'utilise dans le script se trouvant sur le calque bouton n'a pas été défini préalablement comme l'a été player mais qu'il fonctionne à la fois dans le programme principal et dans les fonctions. mainvid est donc le nom d'occurence de mon FLVPlayback que j'ai glissé sur la scène.

Désolé de ne pas avoir pensé à faire ces précisions plus tôt, en fait. Je suppose que c'est important.

player semble donc s'éteindre en sortie de fonction. Je suppose que si je parvenais à le faire coexister en fin de fonction avec mainvid, je pourrais alors utiliser addEventListener pour écouter player et déterminer la fin de la vidéo, ce qui enchainerait ensuite la vidéo "attente" dans mainvid.
0

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

Posez votre question
cs_Girou Messages postés 1203 Date d'inscription lundi 10 mars 2003 Statut Membre Dernière intervention 23 juillet 2009 2
28 avril 2009 à 13:11
"Dans un autre calque, appellé player, se trouve ce que je pense être la définition de player ainsi que"

Ce calque 'player' doit se trouver au même niveau que le calque 'boutons' voir même regrouper les 2 script dans un même calque.

Effectivement, si on fais référence à player (player
.addEventListener(videoEvent.COMPLETE, attente);)

avant de l'avoir défini on ava avoir ce type de message d'erreur

@+
0
cs_phobus Messages postés 8 Date d'inscription mardi 13 avril 2004 Statut Membre Dernière intervention 28 avril 2009
28 avril 2009 à 13:21
En fait, je viens de faire un test pour essayer de comprendre.

Si j'appelle player sans passer par une des fonctions (c1 par exemple) en faisant ceci :

player.visible= true;
player.play("flv/presentation.flv");

A la compilation, flash me dit aussi "Un terme n'est pas défini et n'a pas de propriété.".

Du coup, je crois que je n'ai absolument rien compris à la création d'objet, puisque je ne vois rien dans le code qui fasse la différence entre l'appel d'une occurence dans le programme principal et celui d'un objet qui ne fonctionne pas dans le programme principal, mais fonctionne après appel d'une fonction avec un intermédiaire de type addEventListener.

Quoi qu'il en soit, j'ai modifié mon code en n'utilisant plus que l'occurence (FLVPlayback) mainvid avec les url de chaque vidéo. Là, ça fonctionne.

mainvid.play("flv/presentation_vignettes.flv")

but1.addEventListener(MouseEvent.CLICK, c1);

function c1 (pEvt:
MouseEvent
):
void
{   
mainvid.visible =false;// On masque la vidéo en cours de lecture
mainvid.stop; // Et on arrête sa lecture   
mainvid.visible.play("flv/capsule1.flv"); // On lance la lecture de la vidéo correspondant à notre bouton 1
  }

// Maintenant, le addEventListener détecte la fin de la vidéo et appelle la fonction "attente" ...
mainvid
.addEventListener(videoEvent.COMPLETE, attente);

// ... qui balance la vidéo d'attente,jusqu'à ce que l'utilisateur décide de cliquer sur une autre vidéo ou quitte la page
function attente (pEvt:videoEvent):void
{
    mainvid.play("flv/attente.flv");
}

Mais je me dis que c'est un peu trop simple. Si dans le script original, l'auteur utilise des objets plutôt que des occurences, c'est pour une bonne raison, je suppose, non ?

Merci d'avance pour ton avis
0
cs_Girou Messages postés 1203 Date d'inscription lundi 10 mars 2003 Statut Membre Dernière intervention 23 juillet 2009 2
28 avril 2009 à 13:26
Ben si ça marche pour ce que tu souhaite en faire... pourquoi se casser la tête d'avantage

N'ayant jamais utiliser le composant FLVPlayback, je n'ai pas vraiment d'avis (pertinent) sur la question

@+
0
cs_phobus Messages postés 8 Date d'inscription mardi 13 avril 2004 Statut Membre Dernière intervention 28 avril 2009
28 avril 2009 à 14:27
Oui, c'est probablement vrai...

Ceci dit, est-ce que tu pourrais m'expliquer ce qui fait que player (contenant un objet donc) ne fonctionne que quand il est appelé dans la fonction c1 ?

Je pense que si j'arrive à comprendre ça, j'aurai au moins une notion sur l'utilisation des variables d'objet.
0
Rejoignez-nous