Galerie en fash problem avec on "release" - Web design - Graphisme
Marsh Posté le 06-11-2007 à 05:28:52
Le bon code c'est ca :
Code :
|
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;
};
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+
Marsh Posté le 06-11-2007 à 13:09:29
Ta placé un trace dans ton onRelease pour voir ?
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+
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
Marsh Posté le 06-11-2007 à 22:12:39
Code :
|
"()" 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 :
|
... est couramment utilisé, là c'est le même principe.
Lors d'une affectation du type :
Code :
|
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 :
|
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> , ... )).
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.
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.
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+
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 .
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