Comunidad de diseño web y desarrollo en internet online

ambito de variables

Citar            
MensajeEscrito el 29 Jun 2007 04:08 pm
Como puedo hacer para que las variables ancho, alto, posicion_hriz y posision_vert se hagan globales y las pueda utilizar en la función setUpContainer
editado usa la etiqueta code para el código

Código :

// cargo mis variables externas que pretendo utilizar en la funcion final
// las cuales me daran la posición y el tamaño de un rectangulo generado en flash
datos = new LoadVars();
datos.onLoad = function (){
 ancho = datos.we ;
 alto = datos.hi ;
 posicion_hriz = datos.exis ;
 posision_vert = datos.ye ;

 };
var container:MovieClip = setUpContainer();
var ln:Number = 1;
var spacer:Number = 1;
var duplicate:MovieClip;
for(var i:Number = 1; i < ln; i++) {
    var newY:Number = i * (container._height + spacer);
    duplicate = container.duplicateMovieClip("clip-" + i, i, {_y:newY});
    trace(duplicate); // _level0.clip-[number]
}

function setUpContainer():MovieClip {
    var mc:MovieClip = this.createEmptyMovieClip("container", this.getNextHighestDepth());
 
 

 
                var w:Number = 20;  // ancho necesito utlizarla aquí
    var h:Number = 20; // largo necesito utlizarla aquí
    mc.beginFill(0x333333);
    mc.lineTo(w, 0);
    mc.lineTo(w, h);
    mc.lineTo(0, h);
    mc.lineTo(0, 0);
                mc._x = 200; // posicion_hriz necesito utlizarla aquí
                mc._y = 200; // posision_vert necesito utlizarla aquí
    mc.endFill();
    return mc;
                
}
datos.load("localizacion.php") ;

Por richardf75

1 de clabLevel



 

msie7
Citar            
MensajeEscrito el 29 Jun 2007 06:49 pm
mira para declarar variables globales se _global
asi:
_global.variable = "algo";


o si eseas tambien puedes declararlas en el _root
var variable:Number = 0;


de esta forma podras usarlo en la funcion tambien

Saludos :D

Por flasher

SWAT Team

120 de clabLevel

1 tutorial

 

Peruvian City

firefox
Citar            
MensajeEscrito el 29 Jun 2007 08:01 pm
se supone que al no usar la palabra var se hacen globales también.. pero bah, yo en tu lugar haría alguna de las dos cosas que menciona flasher

aun que por otro lado se debe usar la palabra var en scripts externos, por ejemplo clases.

Por buzu

163 de clabLevel



 

Los Angeles, California

firefox
Citar            
MensajeEscrito el 29 Jun 2007 09:06 pm
fijate que lo he intentado y nada
mira esto
datos.onLoad = function (){
_global.ancho = 5;
alto = datos.hi ;
posicion_hriz = datos.exis ;
posision_vert = datos.ye ;

};
trace(ancho)

//el trace aparece indefinido

Por richardf75

1 de clabLevel



 

msie7
Citar            
MensajeEscrito el 29 Jun 2007 10:20 pm
si lo vi, por eso puse "se supone" ya que se supone que deve ser asi pero no esta funcionando, por eso al final recomiendo usar cualquiera de las dos soluciones que propone flasher.

ahora en tu codigo intenta con trace(_global.ancho) y estoy casi seguro de que funcionara.

Por buzu

163 de clabLevel



 

Los Angeles, California

firefox
Citar            
MensajeEscrito el 29 Jun 2007 10:21 pm
puffff.... datos.ancho

Por buzu

163 de clabLevel



 

Los Angeles, California

firefox
Citar            
MensajeEscrito el 30 Jun 2007 12:00 am
veo lo que pasa mira el onload se ejecuta despues de que hagas el trace, y para un mejor efecto en el onload ponle asi

Código :

datos.onLoad = function (exito){
   if(exito){
      _global.ancho = 400;
  }
}


porque no sabes cuando termine de cargar el php, es mejor que la funcion del setUpContainer este dentro de este if y debajo de la variable declarada

Código :

var container:MovieClip
var datos:LoadVars = new LoadVars();
datos.onLoad = function (exito){
   if(exito){
      _global.ancho = 400;
     container =  setUpContainer();
  }
}


otra recomendacion es que tus variables las declares al inicio sea o no una Clase, por un tema de orden.

Saludos :D

Por flasher

SWAT Team

120 de clabLevel

1 tutorial

 

Peruvian City

firefox
Citar            
MensajeEscrito el 30 Jun 2007 01:44 am
// gracias a todos ya lo solucione alli pongo la solución por si a alguien le sirve

Código :

var ancho:Number = 0; 
var alto:Number = 0; 
var posicion_hriz:Number = 0; 
var posision_vert:Number = 0; 

var container:MovieClip; 
var ln:Number = 1; 
var spacer:Number = 1; 
var duplicate:MovieClip; 

datos = new LoadVars(); 
datos.onLoad = function (success){ 
if(success) { 
ancho = datos.we ; 
alto = datos.hi ; 
posicion_hriz = datos.exis ; 
posision_vert = datos.ye ; 

container = setUpContainer(); 
for(var i:Number = 1; i < ln; i++) { 
var newY:Number = i * (container._height + spacer); 
duplicate = container.duplicateMovieClip("clip-" + i, i, {_y:newY}); 
trace(duplicate); 
} 
} 
}; 

function setUpContainer():MovieClip { 
var mc:MovieClip = this.createEmptyMovieClip("container", this.getNextHighestDepth()); 
var w:Number = _root.ancho; // ancho necesito utlizarla aquí 
var h:Number = _root.alto; // largo necesito utlizarla aquí 

mc.beginFill(0x00CCFF); 
mc.lineTo(w, 0); 
mc.lineTo(w, h); 
mc.lineTo(0, h); 
mc.lineTo(0, 0); 
mc._x = _root.posicion_hriz; // posicion_hriz necesito utlizarla aquí 
mc._y = _root.posision_vert; // posision_vert necesito utlizarla aquí 
mc.endFill(); 

return mc; 
} 

datos.load("localizacion.php") ;
[Editado]Exacto usa las etiquetas para que el codigo se pueda entender, y ayude a responder tus dudas[/Editado]

Por richardf75

1 de clabLevel



 

msie7
Citar            
MensajeEscrito el 30 Jun 2007 03:42 pm
bien, pero pon tu codigo entre etiquetas code, antes que un #$%#@ BOFH lo borre... y una cosa mas, cuidado al usar el _root, aveces no da los resultados esperados.

Por buzu

163 de clabLevel



 

Los Angeles, California

firefox
Citar            
MensajeEscrito el 30 Jun 2007 03:48 pm
muy bien, en el caso del _root podria darte problemas solo si le pones a algun movie el _lockroot el cual en algunos casos te ayudara mucho pero debes saber manejarlo y no exagerar

Saludos :D

Por flasher

SWAT Team

120 de clabLevel

1 tutorial

 

Peruvian City

firefox
Citar            
MensajeEscrito el 30 Jun 2007 04:09 pm
Biennn..... hasta que un bofh no borra el codigo....
por cierto no havia escuchado hablar de _lockroot. ahora hay que investigar.....

Por buzu

163 de clabLevel



 

Los Angeles, California

firefox
Citar            
MensajeEscrito el 06 Nov 2007 11:15 am
Yo estoy utilizando _lockroot en unos clips anidados en uno principal y para comunicar datos entre ellos intento utilizar variables globales;o sea 2 clips independientes que tienen _lockroot=true, se pasarían datos entre sí a través de variables globales pero de momento no lo he conseguido. ¿Alguien tiene noticias de que no funcionen variables declaradas como _global en clips con _lockroot?...

Por Almost_Chinese

15 de clabLevel



Genero:Masculino  

msie
Citar            
MensajeEscrito el 06 Nov 2007 04:01 pm
La verdad es que no sé si tienen relación, pero te diré dos cosas de "buenas prácticas de programación":

  1. Evita el uso de variables globales: Sólo deben ser utilizadas si realmente no existe otra forma de acceder a las variables porque aumentan el gasto de procesamiento y memoria, además de que resultan riesgosas (es fácil equivocarse y colocar un valor inconveniente que luego te costaría un buen tiempo de depuración, porque es difícil de detectar) y violan la ley de encapsulación de la Programación Orientada a Objetos. Ve si existe alguna alternativa al uso de una variable global.
  2. Evita el uso de _root: Tiene el inconveniente de apuntar siempre a la raíz, lo que obliga al uso de _lockroot (que es una chapuza) y te da problemas para comunicarte con la película principal cuando la raíz bloqueada se convierte en hija. Siempre es preferible el uso de _parent. Si son muchos _parent, puedes crear una variable que funcione como "acceso directo". No es casualidad que en AS3 se haya eliminado _root.

Por The Fricky!

Presidente

6168 de clabLevel

3 tutoriales
8 articulos

Genero:Masculino   Bastard Operators From Hell Héroes

Piccola Venezia...

firefox
Citar            
MensajeEscrito el 06 Nov 2007 04:26 pm
Claro. La verdad es que eche mano de _global como remedio a haber utilizado _lockroot. Y a lo se para otra vez. Gracias por los consejos.

Por Almost_Chinese

15 de clabLevel



Genero:Masculino  

firefox
Citar            
MensajeEscrito el 06 Nov 2007 10:13 pm
Quizá les interese esto:
http://www.cristalab.com/tips/28962/ambito-de-variables-en-actionscript-scope-this

Por Zah

BOFH

4290 de clabLevel

27 tutoriales
5 articulos

  Bastard Operators From Hell Editores

Zaragoza, España

firefox

 

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