Billybobbonnet
Messages postés148Date d'inscriptionlundi 12 février 2007StatutMembreDernière intervention 9 novembre 2013
-
10 avril 2007 à 16:26
Darkrats
Messages postés212Date d'inscriptionmardi 2 novembre 2004StatutMembreDernière intervention12 mai 2008
-
11 avril 2007 à 19:41
Bonjour à tous,
Je voudrais créer un lecteur vidéo avec un scrolling multidirectionnel. En gros, j'ai un grand clip en fond et une petite fenêtre, et j'interprète la position de la souris pour scroller d'un côté, ou de l'autre. J'arrive à le faire sur l'axe des X ou celui des Y mais pas sur les deux en même temps.
Voilà le code:
this.onMouseMove = function() {
constrainedMove(bg_mc, 4, 1);
};
function constrainedMove(target:MovieClip, speed:Number, dir:Number) {
var mousePercent:Number = _xmouse/Stage.width;
var mSpeed:Number;
if (dir == 1) {
mSpeed = 1-mousePercent;
} else {
mSpeed = mousePercent;
}
target.destX = Math.round(-((target._width-Stage.width)*mSpeed));
target.onEnterFrame = function() {
J'ai déjà posté sur cette question mais sans aucune réponse, donc je me permets de remettre ça. Je précise que je suis débutant en flash. Quelqu'un peut-il me dire comment m'y prendre. En refaisant la même fonction pour les Y ça ne marche pas, vu que les deux partagent des variables. Comment les faire cohabiter, alors?
Darkrats
Messages postés212Date d'inscriptionmardi 2 novembre 2004StatutMembreDernière intervention12 mai 20081 11 avril 2007 à 14:12
No panic no panic !!!
J'ai réessayé et j'ai trouvé l'erreur dans mon code :
target.destX = Math.round(-((target._width-Stage.width)*mSpeed));
target.destY = Math.round(-((target._height-Stage.height)*mSpeed));
J'ai oublié de remettre à jour la variable.
Ce code là, par contre, fonctionne sans problème (je l'ai testé et ça marche) :
Code :
this.onMouseMove = function() {
constrainedMove(bg_mc, 4, 1);
};
function constrainedMove(target:MovieClip, speed:Number, dir:Number) {
var nMousePercent_x :Number = this._xmouse/Stage.width;
var nMousePercent_y :Number = this._ymouse/Stage.height;
var nSpeed_x :Number = 1-nMousePercent_x;
var nSpeed_y :Number = 1-nMousePercent_y;
target.destX = Math.round(-((target._width-Stage.width)*nSpeed_x));
target.destY = Math.round(-((target._height-Stage.height)*nSpeed_y));
target.onEnterFrame = function() {
if (target._x == target.destX) {
delete target.onEnterFrame;
} else if (target._x>target.destX) {
target._x -= Math.ceil((target._x-target.destX)*(speed/100));
} else if (target._x<target.destX) {
target._x += Math.ceil((target.destX-target._x)*(speed/100));
}
if (target._y == target.destY) {
delete target.onEnterFrame;
} else if (target._y>target.destY) {
target._y -= Math.ceil((target._y-target.destY)*(speed/100));
} else if (target._y<target.destY) {
target._y += Math.ceil((target.destY-target._y)*(speed/100));
}
};
}
Fin code
--------- Darkrats ---------
la loi est dure mais c'est la loi
-------- Infograpix --------
Darkrats
Messages postés212Date d'inscriptionmardi 2 novembre 2004StatutMembreDernière intervention12 mai 20081 10 avril 2007 à 16:47
Salut,
"J'arrive à le faire sur l'axe des X ou celui des Y mais pas sur les deux en même temps
En refaisant la même fonction pour les Y ça ne marche pas, vu que les
deux partagent des variables. Comment les faire cohabiter, alors?"
Bhein en doublant les variables, en en refaisant de nouvelles.
Billybobbonnet
Messages postés148Date d'inscriptionlundi 12 février 2007StatutMembreDernière intervention 9 novembre 2013 10 avril 2007 à 17:25
Bonjour Darkrats et merci à toi pour ta réponse. En fait, j'ai commencé par doubler les variables mais aussi les fonctions et ça n'avait rien donné. J'ai quand même testé ta méthode mais sans succès. Pour info, voici à quoi correspondent les variables (dans la version à un seul axe, X):
-La variable Mousepercent donne la position de la souris en x par rapport à la largeur de la scène (entre 0 et 1)
-La variable mSpeed est soit Mousepercent, soit 1-Mousepercent, ce qui détermine le mouvement (et sa vitesse) de la scène (vers la droite ou la gauche selon la position de la souris)
- La variable DestX stocke la position en x de la souris.
Cette ligne: "target.destX=Math.round(-((target._width-Stage.width)*mSpeed))" permet au scrolling de ne pas aller plus loin que les limites du clip
En principe, avec ta méthode (et même peut-être avec la mienne), ça doit marcher. Pourtant, pas moyen d'y arriver dès qu'on rajoute un axe.
Billybobbonnet
Messages postés148Date d'inscriptionlundi 12 février 2007StatutMembreDernière intervention 9 novembre 2013 11 avril 2007 à 16:28
Merci Drakrats!
Ca fonctionne! Et je t'en dois une!
Drakrats +1
Le scrolling fonctionne à merveille, et j'ai déjà en tête une possibilité d'amélioration. La première version de lecteur que j'avais fait utilisait un code flash très connu (lien ici) qui permet de passer d'un bord à l'autre des 360° en dupliquant le clip qu'on utilise (ils expliquent ça mieux que moi). Le problème du truc, c'est que:
1.Le scrolling est saccadé et instable, encore pire en vidéo
2. Effet de désorientation dû au fait qu'il n'y a plus ni milieu, ni côté.
Or, ce scrolling, ci, que je te dois, Darkrats, a un ralentissement lorsqu'on arrive sur les bords. En le modifiant un peu, il doit être possible de ralentir, et, passé le bord du film en arrivant sur sa copie, de réaccélérer lorsqu'on continue jusqu'au milieu et ainsi de suite. Je vais me pencher sur la question, et refiler le code si j'y arrive le premier. L'étape suivante sera de troquer mon objet vidéo contre une vidéo flv choisie sur le disque d'un serveur. Une fois passé les soucis de taux de tranfert (360° de vidéo, c'est à peu près 3fois plus de contenu), ça devrait fonctionner.
Merci encore, c'était une étape problématique pour moi et tu m'a retiré un fière chandelle du pied! ()
A bientôt!
Vous n’avez pas trouvé la réponse que vous recherchez ?
Billybobbonnet
Messages postés148Date d'inscriptionlundi 12 février 2007StatutMembreDernière intervention 9 novembre 2013 11 avril 2007 à 16:34
Je reviens sur ma montée d'enthousiasme pour quelques modifications: Darkrats+1 et désolé pour les fautes d'orthographe et la taille de police,j'avais pas vu!(pour la suite, par contre j'assume le +1 ;)
Darkrats
Messages postés212Date d'inscriptionmardi 2 novembre 2004StatutMembreDernière intervention12 mai 20081 11 avril 2007 à 19:41
Salut
Vu ton enthousiasme, ça devait être un problème bien épineux ... ton sésame pour toute une floppée de délire flashouillant ha ha ha
Je suis très content d'avoir pu t'aider.
Si maintenant que tu as ta réponse, tu pouvais cocher "réponse acceptée" ça plairait énormément aux modérateurs du forum
Et un bon codeur est un codeur qui flash ... heu ... fache pas les modérateurs (hu hu j'ai pas pu m'empêcher la finte )
Pour ta vidéo, un ptit flv, y a rien de mieux.
En plus il paraît ( mais je n'ai pas encore tester donc c'est à prendre avec des pincettes ) que sur Flash 8, il y a un player déjà fait et tout prêt à être utilisé ... c'est tit pas beau la vie ?
Bon codage et que l'action script soit avec toi ... à jamais
--------- Darkrats ---------
la loi est dure mais c'est la loi
-------- Infograpix --------