Problema ejecutando funciones desde un frame
3 seguidores
tengo una galeria de imagenes que se carga dentro de una pelicula llamada "proyector", esta pelicula tiene dentro un script con una funcion llamada "ejecutor", que hace que se precargue la imagen y se suba el alpha al cargarse. De este modo en los botones que cargan las imagenes incluyo este codigo:
<code>on (release) {
proyector.ejecutor("contenido/imagenes/01.jpg");
}
</code>
el problema me surge porque quiero que se me cargue la primera imagen al empezar la pelicula, pero no he conseguido activar la funcion "ejecutor"
puedo hacer que se cargue dentro de "proyector" pero no con esa funcion programada... alguien me puede echar un cable... tengo ya un dolor de cabeza..
roceth
Si, es un tanto extraño.
Yo lo atribuyo al orden jerárquico de ejecución: primero por niveles, por clips, clips de clips?
Cuando se llama a la función todavía no se ha ejecutado el código del clip, por lo tanto, esa función no existe todavía.
Hay más alternativas (aparte, claro, de definir la función en la escena):
Puedes pasar el código de tu clip a una clase y asignársela a éste.
Puedes utilizar #initclip que fuerza a ejecutar determinado código con prioridad. (ojo, porque lo hace con referencia _root).
Un saludo
reznik
bueno bueno bueno!!! ahi si que me has dejado pilladiiisimo!
coño la de vueltas que he dado!!!
efectivamente funciona poniendo en el frame siguiente al que carga el mc del proyector...
coño coño coño!
jamas se me habria ocurrido!!
y porque es asi?? porque sinceramente no lo entiendo y ya puestos a aprender....
Muchas gracias roceth!!
roceth
Hola
Por lo que veo la función 'ejecutor' está declarada de ntro de un MC. Puedes acceder a ella desde '_root' con:
<code>proyector.ejecutor("contenido/imagenes/01.jpg"); </code>
...que seguro has probado.
Pero debes llamarla en el frame siguiente a donde instancias el clip.
Un saludo
reznik
ahi va eso
<code>function ejecutor(nombre) {
if (!imagen) {
carga(nombre);
} else {
fuera(nombre);
}
}
function carga(nombre) {
createTextField("texto", 2, -30, -7, 90, 15);
texto.setNewTextFormat(basico);
createEmptyMovieClip("imagen", 3);
imagen._alpha = 0;
imagen.loadMovie(nombre);
this.onEnterFrame = function() {
if (imagen.getBytesLoaded()>=imagen.getBytesTotal() && imagen.getBytesLoaded()>100) {
imagen._x = -imagen._width/2;
imagen._y = -imagen._height/2;
delete (this.onEnterFrame);
dentroFondo();
} else {
texto.text = Math.floor(100*imagen.getBytesLoaded()/imagen.getBytesTotal())+"% CARGADO";
}
};
}
function dentroFondo() {
texto.removeTextField();
wfondo = imagen._width+10;
hfondo = imagen._height+10;
hor = false;
ver = false;
fondo.onEnterFrame = function() {
if (this._width<(wfondo-2)) {
this._width += (wfondo-this._width)/4;
} else {
this._width = wfondo;
hor = true;
}
if (this._height<hfondo>=100) {
delete (this.onEnterFrame);
} else {
this._alpha += 10;
}
};
}
function fuera(nombre) {
imagen.onEnterFrame = function() {
if (this._alpha>0) {
this._alpha -= 10;
} else {
delete (this.onEnterFrame);
this.removeMovieClip();
fueraFondo(nombre);
}
};
}
function fueraFondo(nombre) {
wfondo = 70;
hfondo = 20;
hor = false;
ver = false;
fondo.onEnterFrame = function() {
if (this._width>(wfondo+2)) {
this._width += (wfondo-this._width)/4;
} else {
this._width = wfondo;
hor = true;
}
if (this._height>(hfondo+2)) {
this._height += (hfondo-this._height)/4;
} else {
this._height = hfondo;
ver = true;
}
if (hor == true && ver == true) {
delete (this.onEnterFrame);
carga(nombre);
}
};
}
</code>
Isma
Y por qué no pones el código del prototipo en vez de la llamada? Así será más fácil localizar el error.