Comunidad de diseño web y desarrollo en internet online

Funciones Caseras (ayuda expertos!)

Citar            
MensajeEscrito el 21 Ago 2008 03:49 am
Hola, soy nuevo en el foro y tengo una consulta, esto me ha dado dolores de cabeza.
He trabajado antes con actionscript, he hecho funciones pero no habia tenido este problema, derepente lo que me parecia muy logico, no funciona... acudi a un manual y tome un ejemplito super sencillo que tampoco me funciona.

Tengo en pantalla un circulo con InstanceName: circle_1
Y un Boton.

en el primer fotograma y unico tengo el script:
function grow(){
this._xscale+=10
this._yscale+=10
}

Y en el boton tengo:
on (release) {
this.circle_1.grow()
}

Y NO FUNCIONA!!! La funcion que intentaba es mas complicada pero este sencillo script ejemplifica mi problema.
He hecho esto:

En el primer frame:
function grow(cual){

cual._xscale+=10
cual._yscale+=10

}

En el boton:
on (release) {
grow(circle_1)
}

Y ASI SI FUNCIONA! Alguien podria explicarme que esta pasando en el primer ejemplo? por qué no funciona? Soy aprendiz del script y esto de verdad me esta frustrando, pense que el problema era mi corto conocimiento en el script y pr eso acudi al manual y ni el ejemplito me funciona. AYUDA!! :shock:

Por Pachecon

3 de clabLevel



Genero:Masculino  

México D.F.

firefox
Citar            
MensajeEscrito el 21 Ago 2008 06:39 am
La funcion del on press esta dentro del MC o dentro de un boton??

Prueba esto...

Código :

function grow() {
   this._xscale += 10;
   this._yscale += 10;
}


Y el del boton si es el MC

Código :

on (press){
   _root.grow()
}

Por navi_chavez

16 de clabLevel



Genero:Masculino  

firefox
Citar            
MensajeEscrito el 21 Ago 2008 01:18 pm
Mira como tiene la función en el primer frame del timeline cuando te refieres a "this" te refieres al timeline, no a ningún movie situado en el timeline, lo que has hecho es lo correcto, le pasas a la función cual movie es el que tiene que variarle las propiedades, de lo contrario, tendrías que decir:

Código ActionScript :

//---En el frame
function grow():Void{

   this.circle_1._xscale+=10
   this.circle_1._yscale+=10

}

//---En el botón
on(press){

   this._parent.grow();

}


Lo que has hecho es lo mejor, pasar como parámetro que clip es el que se va a mover, lo que debrías darle la ruta también del clip:

Código ActionScript :

//---En el frame
function grow(movie:MovieClip):Void{

   movie._xscale+=10
   movie._yscale+=10

}

//---En el botón
on(press){

   this._parent.grow(this._parent.circle_1);

}


Ojo, los códigos anteriores suponen que circle_1 y tu botón se encuentran los dos en la misma línea de tiempo donde está situada la función.

Por elchininet

Claber

3921 de clabLevel

17 tutoriales

Genero:Masculino  

Front-end developer at Booking.com

firefox
Citar            
MensajeEscrito el 21 Ago 2008 05:04 pm
Gracias, y si los dos estan en la misma linea de tiempo, el boton y el movieclip. Los dos por separado, el boton no esta dentro del MC. Lo que yo quiero es hacer funciones generales como un alpha, xscale, etc... en los que en el boton solo pones algo como:

on (release) {
circle_1._alpha+=10
}

Y listo! Aun no entiendo por que al hacer la funcion casera no es tan simple como eso.

Suponiendo es un solo frame en la linea de tiempo, en el frame esta el codigo de la función y los objetos que serian un MC llamado circle_1 y un boton. ¿Como deberia ser la función?

Por Pachecon

3 de clabLevel



Genero:Masculino  

México D.F.

firefox
Citar            
MensajeEscrito el 21 Ago 2008 06:47 pm

Suponiendo es un solo frame en la linea de tiempo, en el frame esta el codigo de la función y los objetos que serian un MC llamado circle_1 y un boton. ¿Como deberia ser la función?


Los dos ejemplos que te puse se ajustan a tu caso.

Ahora respecto a tu primera pregunta, todo sería muy simple si no programaras encima de los objetos, el problema es que cuando estás programando arriba de un objeto, todo lo que no le pongas el camino donde se encuentra, el botón tratará de buscarlo dentro de él, por ejemplo este código que utilizaste:

Código ActionScript :

on (release) {
    circle_1._alpha+=10
}


Le estás diciendo al movieClip que cuando lo presiones busque un símbolo dentro de él llamado circle_1 y le sume 10 a su alpha, cuando en realidad el símbolo está afuera, por eso debes o decir _root o _parent, para que lo busque fuera de él.

Ahora si programaras desde el frame no tendrías que ponerle la ruta, ya que como estás en el timeline, el código buscará a los símbolos en el timeline, por ejemplo suponiendo que tienes un MC con nombre de instancia "circle_1" y un MC con nombre de instancia "boton" podrías hacer algo como esto desde el frame:

Código ActionScript :

//---Función de cambiar alpha a cualquier objeto
function changeAlpha(movie:MovieClip):Void{

    movie._alpha += 10;

}

//---Acción del boton
boton.onPress = function():Void{

    changeAlpha(circle_1);

}


Como ves no es necesario ponerle rutas ni a la función changeAlpha ni al movieClip "circle_1" que he mandado como parámetro, ya que los dos símbolos se encuentran en el mismo scope que las funciones.

Por elchininet

Claber

3921 de clabLevel

17 tutoriales

Genero:Masculino  

Front-end developer at Booking.com

firefox
Citar            
MensajeEscrito el 21 Ago 2008 10:25 pm
Hey, muchas gracias por tomarte tu tiempo.

Por Pachecon

3 de clabLevel



Genero:Masculino  

México D.F.

firefox
Citar            
MensajeEscrito el 22 Ago 2008 05:58 am
Y yo no me merezco un agradecimiento??? :(

Me tome un minuto de mi tiempo para probar la función!!

:lol: :lol: Naaa!! no es verdad solo estoy jugando!! que bueno que te explicaron la forma correcta de crear funciones...!! :wink:

^^

Por navi_chavez

16 de clabLevel



Genero:Masculino  

firefox

 

Cristalab BabyBlue v4 + V4 © 2011 Cristalab
Powered by ClabEngines v4, HTML5, love and ponies.