Galerie en fash problem avec on "release"

Galerie en fash problem avec on "release" - Web design - Graphisme

Marsh Posté le 05-11-2007 à 17:34:57    

Salut, j'essaye de réaliser une galerie en flash,
pour cela je load des .swf dans un dossier, puis je leur donne une position, jusque là ça marche, mais j'aimerais aussi qu'il puisse réagir quand on clique dessus avec le "onRealeas"e, malheureusement quand on clique dessus il ne se passe rien :heink: .
Voici mon code:
 
for (var i = 1 ; i<=_global.num; i++) {
createEmptyMovieClip("clip"+i, i);
loadMovie("pict_"+i+".swf","clip"+i);
this["clip"+i]._x = 400;
this["clip"+i]._y = 200;  
this["clip"+i].onRelease = function(){
 this["clip"+i]._y = 300;
 };
}
 
Merci

Reply

Marsh Posté le 05-11-2007 à 17:34:57   

Reply

Marsh Posté le 06-11-2007 à 05:28:52    

Le bon code c'est ca :

Code :
  1. for (var i = 1; i <= _global.num; i++) {
  2. var clip:MovieClip = this.createEmptyMovieClip("clip" + i, i);
  3. loadMovie("pict_" + i + ".swf", clip);
  4. clip.id = i;
  5. clip._x = 400;
  6. clip._y = 200;
  7. clip.onRelease = function() {
  8.  clipClick(this.id);
  9. };
  10. }
  11. function clipClick(id) {
  12. this["clip" + id]._y = 300;
  13. }


Si tu donnes pas un identifiant a ton clip, le onRelease peut pas le retrouver. Cet exemple est valable pour poser des events sur des objets en boucle.
Dans ton cas, tu peux simplement faire :
 clip.onRelease = function() {
  this._y = 300;
 };


---------------
Jeu de simulation Boursière - Version BETA - https://www.facebook.com/wildstocks
Reply

Marsh Posté le 06-11-2007 à 12:14:29    

Salut, merci pour ta réponce,
 
j'ai remis le code suivant:
 
for (var i = 1; i <= _global.num; i++) {
var clip:MovieClip = this.createEmptyMovieClip("clip" + i, i);
loadMovie("pict_" + i + ".swf", clip);
clip.id = i;
clip._x = (i-1)*_global.eccart;;
clip._y = 200;
clip.onRelease = function() {
 clipClick(this.id);
};
}
function clipClick(id) {
this["clip" + id]._y = 300;
}
 
 
 
Mais il ne veut toujours rien savoir, je suis sur flash MX 2004, vu que c'est une vieille version ça vient peu être de là?
A+
 
 

Reply

Marsh Posté le 06-11-2007 à 13:09:29    

Ta placé un trace dans ton onRelease pour voir ?


---------------
Jeu de simulation Boursière - Version BETA - https://www.facebook.com/wildstocks
Reply

Marsh Posté le 06-11-2007 à 14:58:22    

oui, j'ai essayé ça:
 
_global.eccart=500;
_global.num=5;
 
 
for (var i = 1; i <= _global.num; i++) {
var clip:MovieClip = this.createEmptyMovieClip("clip" + i, i);
loadMovie("pict_" + i + ".swf", clip);
clip.id = i;
clip._x = (i-1)*_global.eccart;
clip._y = 200;
clip.onRelease = function() {
 clipClick(this.id);
};
}
function clipClick(id) {
 trace("salut!!! = " );
}
 
 
 
mais y a rien qui sort...
Je précise que ce code tel quel sur une frame, au cas ou...
A+
 
 

Reply

Marsh Posté le 06-11-2007 à 17:46:10    

Ah oui non, ca me revient, le clip que tu crees il doit faire 0x0px du coup il est pas clicable meme en mettant un clip dedans.
Faut trouver un moyen de parer ça.
Mais la je vais me coucher, la reponse demain peut etre :D


---------------
Jeu de simulation Boursière - Version BETA - https://www.facebook.com/wildstocks
Reply

Marsh Posté le 06-11-2007 à 22:12:39    

Code :
  1. _global.eccart=500;
  2. _global.num=5;
  3.  
  4. for (var i = 1; i <= _global.num; i++) {
  5. var clip:MovieClip = this.createEmptyMovieClip("clip" + i, i);
  6. loadMovie("pict_" + i + ".swf", clip);
  7. clip.id = i;
  8. clip._x = (i-1)*_global.eccart;
  9. clip._y = 200;
  10. clip.onRelease = clipClick;
  11. function clipClick() {
  12. trace( "id: " + this.id );
  13. }


 
"()" est l'opérateur d'appel d'une fonction, "clipClick" est une fonction. Quand on supprime l'opérateur d'appel, on pointe juste la fonction.
 
C'est pour ça que ...
 

Code :
  1. delete this.onRelease


 
... est couramment utilisé, là c'est le même principe.
 
Lors d'une affectation du type :
 

Code :
  1. clip.onRelease = clipClick;


 
le scope de la fonction est logiquement celui de l'objet à laquelle elle est attribuée ici <clip>, donc this = le bouton.
 
mon premier code est donc équivalent à ça, mais en plus logique et en moins lourd :

Code :
  1. import mx.utils.Delegate;
  2. _global.eccart=500;
  3. _global.num=5;
  4.  
  5. for (var i = 1; i <= _global.num; i++) {
  6. var clip:MovieClip = this.createEmptyMovieClip("clip" + i, i);
  7. loadMovie("pict_" + i + ".swf", clip);
  8. clip.id = i;
  9. clip._x = (i-1)*_global.eccart;
  10. clip._y = 200;
  11. clip.onRelease = Delegate.create(clip,clipClick);
  12. function clipClick() {
  13. trace( "id: " + this.id );
  14. }


 
Les fonctions sont des objets de la classe Function, qui est intéressante et très pratique, particulièrement sa méthode call() pour faire des callbacks "scopables" qu'on trouve parfois dans l'API (par exemple reproduire une structure du type setInterval( <scope> , <méthode> , ... )).


Message édité par antika le 06-11-2007 à 22:25:28
Reply

Marsh Posté le 06-11-2007 à 22:42:11    

Salut, je doit mal m'y prendre, ça ne marche pas non plus...
Les image s'affichent bien mais ne sont pas cliquables.

Reply

Marsh Posté le 06-11-2007 à 22:46:33    

tu ne dois pas charger l'image directement dans <clip>, à l'arrivée de l'image elle efface les méthodes & propriétés que tu viens de lui affecter.
 
créer un sous-clip dans <clip> et attache-là dessus.
 

Reply

Marsh Posté le 07-11-2007 à 21:27:56    

Salut, en effet, le chargement de l'image efface les proprietés,
J'ai pu résoudre le problème grace à ce code trouvé sur le net:
 
if(__onLoadHandler__ == undefined) _global.__onLoadHandler__ = {};
//assign property-handlers for onLoad (courtesy of Gnut)
MovieClip.prototype.addProperty(
"onRelease",
function(){return __onLoadHandler__[this]},
function (f){__onLoadHandler__[this] = f}
);
 
Merci A+

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed