¿Alguna forma en Flash 8 para que el nombre de la variable sea una cadena guardada en otra variable?

Otra vez, esta vez te estribo porque estoy empezando en esto de la programación orientada a objetos (con el panel de ayuda de Flash 8 xD) y tenia una duda. Yo tengo una clase "ArchivoDeTexto" y quisiera que fuera el usuario quien añadiera y eliminara objetos de esa clase. ¿Es posible?
Es decir, el mayor problema que he tenido con ActionScript es cuando el valor que quiero modificar es un nombre interno, ya sea el nombre de una variable o, como en este caso, el nombre de un objeto.
También es otro obstáculo que tengo cuando tengo que guardar los antiguos datos que ha introducido el usuario y uso:
---------------
save10 = save9;
save9 = save8;
...
save2 = save1;
save1 = texto;
texto = "";
---------------
Me preguntaba si hay alguna forma de hacer que el nombre de la variable sea una cadena guardada en otra variable.
Como siempre, espero haberme explicado bien, porque me fui un poco por las ramas xD.
Gracias adelantadas.
---
Sel

1 respuesta

Respuesta
1
Depende que quieras hacer, supongo que si.
Pero Carpeta_X no esta en el _root, debería ser así:
trace (this.[nombre].tamaño);
Hay formas de crear variables dinámicamente, es decir, cada vez que el usuario realice una acción, se creara una variable con un nombre diferente y con un valor diferente también.
Seria de la siguiente forma
var ejemplo:String = "ejemplo";
//ahora crearemos variables en forma dinamica
for(var i=0; i<5; i++){
_level0[ejemplo+i] = i;
}
//
Trace(ejemplo0)
Trace(ejemplo1)
Trace(ejemplo2)
Trace(ejemplo3)
Trace(ejemplo4)
Aquí creamos 5 variables diferentes, nombres diferentes, valores diferentes, y hasta se podría hacer que el tipo de datos de cada una también sea diferente agregando :String, :Number, :Array, etc.
Creo que con esto lograras hacer lo que necesitas, solo tienes que adaptarlo a lo que ya tienes.
De todas formas si necesitas que te explique algo más avisame.
Me funciona perfectamente! Mil gracias, ya te debo nosecuantas xD.
Ahora otra duda que me sale ahora es si se podría hacer algo así:
----------------
switch (count) {
for (i=1; i<=10; i++){
case i :
texto = _level0[save+i];
break;
}
}
-----------
El problema es que el compilador me dice:
--------
**Advertencia** Escena=Escena 1, capa=Codigo, fotograma=1:Línea 365: no hay declaraciones 'case' en la declaración 'switch'
Se ignorarán las declaraciones que aparezcan antes de la primera declaración 'case' que se encuentre dentro de una declaración 'switch'
--------
Si lo sabes mejor, pero si te es mucho problema lo dejo como esta.
Gracias
---
Sel
Otro problemita (esto ya es demasiado para mi ^_^U). Me metí a hacer clases, con la esperanza que la ley de Murphy mirara para otro lado, pero parece que no tuve suerte.
Intenté hacer la clase Carpeta, y el resultado fue este:
--------------------------
class Clases.FFS.Carpeta {
public nombre = "";
private pass = "";
public direccion = new Array();
public carpetas = new Array();
public contenido = new Array();
public tamañ = 0;
public abri = false
public function Carpeta(nombre:String, acceso:String, pass:String) {
}
public function tamaño(){
this.tamañ = 0
for (i=0; i<this.carpetas.length; i++){
this.tamañ += this.carpetas.tamañ
}
for (i=0; i<this.contenido.length; i++){
this.tamañ += this.contenido.tamañ
}
}
...
}
--------------------------
Pero el compilador me responde:
-------------
Hay que definir la clase 'Clases.FFS. Carpeta' en un archivo cuya ruta relativa sea 'Clases\FFS\Carpeta.as'.
Se ha utilizado un atributo de miembro de clase incorrectamente.
public nombre = "";
...
Se ha utilizado un atributo de miembro de clase incorrectamente.
public abri = false
Se ha utilizado un atributo de miembro de clase incorrectamente.
public function Carpeta(nombre:String, acceso:String, pass:String) {
...
-------------
En fin, me ha dado más errores que windows ^_^U y no se que significa.
Espero no sobrecargarte de preguntas pero es que aun tengo otra duda xD
¿Si el archivo película.fla tiene la función "script()" la puedo usar desde la clase o tengo que crearla de nuevo?
Bueno, si no puedes responder a todo es comprensible, y si puedes es que no eres humano xD
Gracias
---
Sel
Intenta con lo siguiente
En lugar de asignarle un valor a las variables en el comienzo, solo indica su tipo de dato:
class Clases.FFS.Carpeta {
public var nombre:String;
private var pass:String;
public var direccion:Array;
public var carpetas:Array;
public var contenido:Array;
public var tamaño:Number;
public var abri:Boolean;
public function Carpeta(nombre:String, acceso:String, pass:String) {
nombre = ""
pass = ""
direccion = []
carpetas = []
contenido = []
tamaño = 0
abri = false
}
...
Etc
con respecto a 'Clases\FFS\Carpeta.as'...
¿En dónde se encuentra ese .as?
El archivo se encontraba en
C:\Documents and Settings\Seldaiendil\Configuración local\Datos de programa\Macromedia\Flash 8\es\Configuration\Classes\Clases\FFS\Carpeta.as
Pero el problema era que el archivo se llamaba "Carpetas.as" y la clase "Carpeta" (en singular).
Me has salvado!
Lo del Switch no tiene otra opcion, no?
---
Sel
Necesito saber que quieres hacer con ese Switch.
¿Con qué fin lo haces?
Bueno, no consigo explicar claramente lo del Switch, así que lo dejaré como esta, que aunque estorbe a la vista, funciona xD
¿Y otra duda (ahora que trabajo con clases me surge el problema) este código funcionaria?
----------
Carpeta_X = new Carpeta();
Carpeta_X.tamaño = 10;
nombre = Carpeta_X;
trace (_root.[nombre].tamaño);
----------
Gracias
---
Sel
Excelente, el programa ¡Funciona! (Al menos la mayor parte xD
Cualquier otra pregunta que surja te la hago aparte, que ahora me doy cuenta que después de todo no te estoy puntuando ^_^U
Si todo sale bien te paso una copia del programa a ver que te parece ;)
Gracias
---
Sel

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas