Foros del Web » Creando para Internet » Flash y Actionscript »

Diferencia onRelease y =function()

Estas en el tema de Diferencia onRelease y =function() en el foro de Flash y Actionscript en Foros del Web. Hola, estoy estudiando as y tengo una duda que seguramente será una tontería pero no lo entiendo. Cuando yo creo un botón para q se ...
  #1 (permalink)  
Antiguo 29/12/2005, 05:53
Avatar de Hapki  
Fecha de Ingreso: febrero-2005
Mensajes: 263
Antigüedad: 12 años, 9 meses
Puntos: 1
Diferencia onRelease y =function()

Hola, estoy estudiando as y tengo una duda que seguramente será una tontería pero no lo entiendo.

Cuando yo creo un botón para q se reproduzca un clip pongo:

on(release){
clip_mc.gotoAndPlay(10);
}

pero en muchos sitios en visto el siguiente codigo;

boton_btn.onRelease=function(){
clip_mc.gotoAndPlay(10);
}

Que diferencia hay entre ellos, pq el resultado es el mismo, la unica diferencia q yo he visto es q el primer codigo va en el boton y el segundo en un fotograma, no se si esa es la unica diferencia o no, pues "function" no se muy bien que es y estoy algo despistada, alguien puede echarme una mano?

Muchas gracias!
  #2 (permalink)  
Antiguo 29/12/2005, 08:12
Avatar de Mauri1  
Fecha de Ingreso: noviembre-2002
Ubicación: Santiago de Chile
Mensajes: 558
Antigüedad: 15 años
Puntos: 0
boton_btn.onRelease=function(){
clip_mc.gotoAndPlay(10);
}

Generalmente se ocupa para los movieclips, para que así tengan comportamientos de botón, boton_btn es el nombre de instancia del mc. Al poner onRelease, onPress, etc, en la ejecución saldrá una manito cuando pases el cursor sobre el mc, permite que estos se comporten como botón, pero con todas las ventajas y cualidades que tiene los movieclips
  #3 (permalink)  
Antiguo 29/12/2005, 08:58
Avatar de Bandit
Moderador
 
Fecha de Ingreso: julio-2003
Ubicación: Lima - Perú
Mensajes: 16.726
Antigüedad: 14 años, 5 meses
Puntos: 406
Hola Hapki:
La función no se utiliza solamente para los MC (Clip de películas), también para los botones, la diferencia es que el código de los eventos se pone en el primer frame de la línea de tiempo principal, por ejemplo si tienes un botón que tenga como nombre: btn el código sería así:
btn.onRelease = function(){
//aquí la acción que desees;
}
Lo mismo para un MC que tenga como nombre de instancia: clip:
clip.onRelease = function(){
//aquí la acción que desees;
}
Esto te evita estar colocando el evento en cada botón o MC ya que todos los códigos van a estar en el frame.

Espero haberte sido de ayuda y esté clara la explicación.
__________________
Bandit.
Si no sabes estudia y si sabes enseña.
http://www.banditwebdesign.com/
  #4 (permalink)  
Antiguo 29/12/2005, 09:07
Avatar de luistar  
Fecha de Ingreso: marzo-2005
Ubicación: Argentina
Mensajes: 939
Antigüedad: 12 años, 9 meses
Puntos: 0
como bien tu has dicho, se diferencian en que uno se aplica directamente sobre el objeto, y lo segundo desde cualquier contexto....

en la primera, las acciones que apliques obedecen a eventos, y son aplicables sólo a MovieClips y Botones
on(evento) {//acciones} para botones
onClipEvent(evento){//acciones} para movie clips

- los movieclips también pueden aceptar eventos de boton, si se les aplica estos eventos actuarán como botón
- en cambio los botones no aceptan eventos de movie clip, te marcará error

cuando uno aplica directamente acciones en un objeto (boton o movieclip) siempre tendrán que obedecer a un evento, osea, siempre necesariamente deberán estar encerrados dentro de on(evento) para botones y mc's ó dentro de onClipEvent(evento) para movieclip's

la segunda manera que mencionas, es la asignación de acciones mediante el modelo de objeto de AS, osea

objeto.propiedad
objeto.metodo()
objeto.onEvento = function


como te decía, se puede aplicar desde cualquier contexto, lo importante es ubicar la ruta del objeto y trabajar con ella, ya sea modificando sus propiedades, invocando sus metodos o asignando acciones para determinados eventos....
un ejemplo de esto último:

this._parent['mc'].onPress = function(){
this.play();
};


lo subrayado es el OBJETO (instancia), onPress el evento y lo que sigue las acciones para cuando se sucite el evento

:D
__________________
Si digo que soy mentiroso. ¿Lo soy?
  #5 (permalink)  
Antiguo 29/12/2005, 10:50
Avatar de Hapki  
Fecha de Ingreso: febrero-2005
Mensajes: 263
Antigüedad: 12 años, 9 meses
Puntos: 1
Muchisimas gracias a los tres, de verdad, y gracias por responderme tan rápido, sois geniales.

Ahora solo un par de preguntitas más, que me han quedado en duda, y es que, como dijo mauri1, con este tipo de script puedo añadir eventos de raton a clips? es q lo he probado y me sale q tengo q meterlo dentro de onclipevent, que requisitos tiene q cumplir el clip para añadirles eventos de raton?

Y la otra pregunta era, si yo añado este script,
boton_btn.onRelease=function(){
clip_mc.gotoAndPlay(10);
}
a un fotograma, cuando la linea de tiempo pase de ese fotograma (pongamos q se encuentra en el primer frame) deja dicho boton de tener esa funcion? o se la mantiene durante toda la linea de tiempo y solo cambia cuando cambia de escena? o por el contrario, siempre la mantiene al igual q lo haria si se lo añado al objeto en vez de al frame?

Y ya que estamos, este tipo de script, q mencioné anteriormente es lo llamado "metodo de controlador de evento" o eso es otra cosa? Y para usar este script es solo porque este todo junto en un fotograma y asi mas limpio y ordenado o hay otros motivos?

Bueno, espero no ser pesada, es q estoy desde hace tiempo atascada en esto, y si no me aclaro no puedo seguir, muchisimas gracias de verdad.

Muchos saludos!!!
  #6 (permalink)  
Antiguo 29/12/2005, 11:00
Avatar de Bandit
Moderador
 
Fecha de Ingreso: julio-2003
Ubicación: Lima - Perú
Mensajes: 16.726
Antigüedad: 14 años, 5 meses
Puntos: 406
Si tu usas la función para darle el evento de un botón a un Clip de película, ese código lo tienes que poner en el primer frame de tu línea de tiempo principal y no en el Clip de película, por esa razón te aparece la ventana de salida dandote el error.
Te estoy enviando un MP.

Espero poderte ser de ayuda.
__________________
Bandit.
Si no sabes estudia y si sabes enseña.
http://www.banditwebdesign.com/
  #7 (permalink)  
Antiguo 29/12/2005, 14:24
 
Fecha de Ingreso: enero-2005
Mensajes: 27
Antigüedad: 12 años, 10 meses
Puntos: 0
Problema.

Bueno, saludando a todos, tengo un problemita respecto a este dilema de ocupar funciones en ves de acciones a los botones..

me preguntaba si es posible asignar a tres MC, una misma funcion. y no hacer tres funciones para los tres MC?

espero respuesta comentarios, etc. Gracias.
  #8 (permalink)  
Antiguo 29/12/2005, 14:49
Avatar de luistar  
Fecha de Ingreso: marzo-2005
Ubicación: Argentina
Mensajes: 939
Antigüedad: 12 años, 9 meses
Puntos: 0
si los 3 movieClips son instancias del mismo objeto
osea si son dúplicas una de otra, sólo que con diferentes nombre de instancia
puedes ponerle el mismo comportamiento a todos, escribiendo el código referente a ese mc en un frame de éste...
así todas las instancias de ese MovieClip tendrán esas acciones

otra manera es cuando nombramos a nuestros MovieClips con algun prefijo:
por ejemp:
boton_inicio
boton_descarga
boton_login
...
entonces conociendo este prefijo podemos darle la misma funcion a todos aquellos que comiencen por 'boton'
prueba este código en un frame del contenedor de los movie clips...
Código PHP:
/*CODIGO ACTION SCRIP*/
//recorremos uno a uno los elementos de 'this' y tomamos su nombre que será la variable 'i'
for(i in this){
    
//verificamos si 'i' (el nombre del elemento' comienza con 'boton'
    
if(i.substr(0,5)=='boton'){
        
//de ser cierto:  aplicamos una misma función a todos ellos
        
this[i].onRelease = function(){trace(this._name);}
    }
}
stop(); 
para que te funcione pon en escena varios movieclip cuyos nombres de algunos que comiencen con 'boton' y otros nos

Si no tuvieras un prefino para nuestros movieClips, tendríamos que saber alguna característica particular que los diferencie del resto...
si conocemos esa caracteristica bastarìa asignar una acciòn a los elementos que posean dicha característica; como hemos echo en el caso anterior cuya característica es que comiencen por 'boton'

:D
__________________
Si digo que soy mentiroso. ¿Lo soy?
  #9 (permalink)  
Antiguo 29/12/2005, 15:10
 
Fecha de Ingreso: enero-2005
Mensajes: 27
Antigüedad: 12 años, 10 meses
Puntos: 0
Mil Gracias.

Cita:
Iniciado por luistar
si los 3 movieClips son instancias del mismo objeto
osea si son dúplicas una de otra, sólo que con diferentes nombre de instancia
puedes ponerle el mismo comportamiento a todos, escribiendo el código referente a ese mc en un frame de éste...
así todas las instancias de ese MovieClip tendrán esas acciones

otra manera es cuando nombramos a nuestros MovieClips con algun prefijo:
por ejemp:
boton_inicio
boton_descarga
boton_login
...

Solo decirte Mil gracias.

lo otro, como podria darle a un MC, varias fuinciones. me explico. poder darle onRelease,onRollOver,onRollOut,onDragOut, todo esto a un solo MC atraves de una funcion. se puede?

Última edición por crldesign; 29/12/2005 a las 15:23
  #10 (permalink)  
Antiguo 29/12/2005, 15:33
Avatar de jahepi
Colaborador
 
Fecha de Ingreso: diciembre-2004
Ubicación: Querétaro
Mensajes: 1.124
Antigüedad: 13 años
Puntos: 43
Cita:
Iniciado por crldesign
Solo decirte Mil gracias.
Hola crldesign!

Una forma yo creo más fácil de hacerlo, es asignando el evento a la propiedad prototype de la clase MovieCLip, si asignas a la propiedad prototype alguna función, evento o variable, esta las compartira en todas las instancias creadas apartir de la clase Movieclip debido a que es una propiedad estática, aquí un ejemplo:

Código PHP:
//-------------------------------------------//
MovieClip.prototype.onPress = function() {
    
trace(this._name);
}; 
Ese evento estará presente en completamente todas las instancias creadas apartir de la clase Movieclip, basta con crear un MC, automáticamente tendrá asignado ese evento.

Si lo que quieres es asignarlo a ciertos Movieclips, puedes agregar un método y ese método creara el evento para una instancia en particular.

Código PHP:
MovieClip.prototype.addEvent = function() {
    
this.onPress = function() {
        
trace(this._name);
    };
}; 
De esta forma puedes asignarle a los botones deseados el evento, por ejemplo si tienes un Movieclip con instancia 'button', lo único que tendrías que hacer para añadir el evento sería:

Código PHP:
button.addEvent(); 
Son muchas las ventajas que nos ofrece la propiedad Prototype de cualquier clase, este es un claro ejemplo de eso.

Sale, nos vemos luego!

Suerte!
  #11 (permalink)  
Antiguo 30/12/2005, 08:18
 
Fecha de Ingreso: enero-2005
Mensajes: 27
Antigüedad: 12 años, 10 meses
Puntos: 0
Cita:
Iniciado por jahepi
Hola crldesign!

Una forma yo creo más fácil de hacerlo, es asignando el evento a la propiedad prototype de la clase MovieCLip, si asignas a la propiedad prototype alguna función, evento o variable, esta las compartira en todas las instancias creadas apartir de la clase Movieclip debido a que es una propiedad estática, aquí un ejemplo:

Código PHP:
//-------------------------------------------//
MovieClip.prototype.onPress = function() {
    
trace(this._name);
}; 
Ese evento estará presente en completamente todas las instancias creadas apartir de la clase Movieclip, basta con crear un MC, automáticamente tendrá asignado ese evento.

Si lo que quieres es asignarlo a ciertos Movieclips, puedes agregar un método y ese método creara el evento para una instancia en particular.

Código PHP:
MovieClip.prototype.addEvent = function() {
    
this.onPress = function() {
        
trace(this._name);
    };
}; 
De esta forma puedes asignarle a los botones deseados el evento, por ejemplo si tienes un Movieclip con instancia 'button', lo único que tendrías que hacer para añadir el evento sería:

Código PHP:
button.addEvent(); 
Son muchas las ventajas que nos ofrece la propiedad Prototype de cualquier clase, este es un claro ejemplo de eso.

Sale, nos vemos luego!

Suerte!
Me perece perfecta la aplicacion prototype, sin duda me ayudaron muchisimo. mil gracias y felices fiestas.
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta

SíEste tema le ha gustado a 1 personas




La zona horaria es GMT -6. Ahora son las 06:47.