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

Terminal de comandos en Flash AS3.0

Estas en el tema de Terminal de comandos en Flash AS3.0 en el foro de Flash y Actionscript en Foros del Web. Hola, quisiera saber si hay forma de que en un campo de texto, escriba "root.Moviecip1.visible=false" y al presionar un botón, el MC "Movieclip1" desaparezca y ...
  #1 (permalink)  
Antiguo 13/09/2009, 15:05
 
Fecha de Ingreso: septiembre-2009
Mensajes: 14
Antigüedad: 14 años, 7 meses
Puntos: 0
Terminal de comandos en Flash AS3.0

Hola, quisiera saber si hay forma de que en un campo de texto, escriba "root.Moviecip1.visible=false" y al presionar un botón, el MC "Movieclip1" desaparezca y así con cualquier objeto del escenario, es decir, que pueda tener una "miniconsola" de ActionScript ejecutando en tiempo real.

gracias.
  #2 (permalink)  
Antiguo 13/09/2009, 15:31
Avatar de Eskombro  
Fecha de Ingreso: septiembre-2009
Ubicación: Colombia
Mensajes: 437
Antigüedad: 14 años, 7 meses
Puntos: 22
Respuesta: Terminal de comandos en Flash AS3.0

Pues a mi modo de ver no tienes forma de trasferir el texto que escribas en un campo de texto al codigo de la aplicación. Por eso te tocaría programarlo de todas formas.

A lo que me refiero es que puedes escribir en el texto la acción que quieres ejecutar. Cuando haces click en el botón, el texto se almacena en una variable. Después confirmas a través de un if si lo que escribió coincide con una acción y en caso de ser cierto, ejecutas una accion. ¿Si me entiendes?

El texto, digamos que se llame así: campoTexto. el botón lo debes configurar para que introduzca campoTexto.text en una variable String. digamos que la persona escribe mouse.hide(); en el campo de texto. Entonces tu debes haber configurado una variable que digamos se llama
-var ocultarMouse:String="mouse.hide();"-

entonces cuando el haga click debe almacenarse el texto del campo en una variable:

var textoIntroducido:String;
textoIntroducido=campotexto.text;

y debe haber un if que compruebe si ambas variables son iguales, En caso de que suceda, ejecuta la accion:

if(textoIntroducido==ocultarMouse){
mouse.hide();
}

Y creo que con eso sería todo. Ahora, tu le puedes poner a escribir lo que quieras y configurar ambas variables. Digamos que no tenga que escribir mouse.hide(); sino un texto sencillo : "ocultar mouse" y a la variable coultarMouse le das como valor inicial lo mismo "ocultar mouse".

Así debería funcionar. En actionScript 2 puedes ponerle al texto que se lmacene inmediatamente en una variable y así te ahorras un paso. En AS3 no, pero ´no sé cual manejas.

un saludo colombiano.
Eskombro.
  #3 (permalink)  
Antiguo 13/09/2009, 18:34
 
Fecha de Ingreso: septiembre-2009
Mensajes: 14
Antigüedad: 14 años, 7 meses
Puntos: 0
Respuesta: Terminal de comandos en Flash AS3.0

Muchas gracias, si lo que quiero es en AS3.0.

El problema es que en mi trabajo hay mas de 1000 movieclips y cada uno con un nombre diferente, lo que lo haría un poco difícil, y ya tengo como una idea, no hay forma de que en un textImput valla la acción (la cual se valida por IF) y en otro el objeto al que se va a aplicar, este si puede ser introducido por el usuario. algo como...

Código:
if(textoIntroducido==ocultarMouse){
textImputconelobjeto + mouse.hide();
}
ojalá me puedas ayudar y darme un ejemplo completo en AS3.0

Saludos también de Colombia!
  #4 (permalink)  
Antiguo 13/09/2009, 21:55
Avatar de Eskombro  
Fecha de Ingreso: septiembre-2009
Ubicación: Colombia
Mensajes: 437
Antigüedad: 14 años, 7 meses
Puntos: 22
Respuesta: Terminal de comandos en Flash AS3.0

Realment no se a que te refieres con lo del text imput (perdonaras la ignorancia). Pero si los mil clips estan importados dentro de una misma película yo creo que eso se podría hacer de la misma forma, configurando una variable para cada clip (cosa que se puede hacer con un loop for o while o algo así) y comprobando igual que el texto introducido que se reiere al nombre de la peli sea el mismo nombre de un movieclip. Pero creo que eso así necesitaría algo como mil años para configurarlo. La verdad ya no sabria como hacerlo, no es que sea un experto en ese tema.

A ver si entendi: dices que hay como mil movieclips, pero cada uno de esos es un archivo swf aparte? o todo es parte de un mismo archivo .fla? y lo que quieres es una "consola"que maneje los "mil"moveiclips dentro del mismo archivo swf. Un texto debe decir cual movieclip, y el otro cual accion ejecutar. Yo creo que para ambos casos de campo de texto debe ser la misma idea, que una variable compruebe a cual movieclip se refiere, y otra compruebe que función se quiere ejecutar. y crear una variable para cada movieclip, y una para cada acción que se pueda ejecutar desde la consola, con la idea que te escribi antes. Algo así? No estoy seguro de entender tu pregunta. Me cuentas.

Otro saludo!!!
  #5 (permalink)  
Antiguo 14/09/2009, 00:00
Avatar de HackmanC  
Fecha de Ingreso: enero-2008
Ubicación: Guatemala
Mensajes: 1.817
Antigüedad: 16 años, 2 meses
Puntos: 260
Sonrisa Respuesta: Terminal de comandos en Flash AS3.0

Hola,

Posiblemente te sea de alguna ayuda:

Código actionscript:
Ver original
  1. btnButton.addEventListener(MouseEvent.CLICK, clickHandler);
  2. function clickHandler(event:MouseEvent):void {
  3.  
  4.     // txtText1.text ~ Nombre del MC
  5.     // txtText2.text ~ Propiedad o Método
  6.     // Otros txtTexts...
  7.  
  8.     if (typeof(this[txtText1.text][txtText2.text]) == "boolean") {
  9.         this[txtText1.text][txtText2.text] = false;
  10.     }
  11.     if (typeof(this[txtText1.text][txtText2.text]) == "function") {
  12.         this[txtText1.text][txtText2.text].call();
  13.     }
  14. }

Es solo una idea general, tendrías que implementarla adecuadamente.

Saludos,
  #6 (permalink)  
Antiguo 14/09/2009, 00:10
Avatar de HackmanC  
Fecha de Ingreso: enero-2008
Ubicación: Guatemala
Mensajes: 1.817
Antigüedad: 16 años, 2 meses
Puntos: 260
Sonrisa Respuesta: Terminal de comandos en Flash AS3.0

Hola,

Para que quede un poco más claro:

Código ActionScript:
Ver original
  1. if (typeof(this["mc1"]["visible"]) == "boolean") {
  2.         this["mc1"]["visible"] = false;
  3.     }
  4.     if (typeof(this["mc1"]["play"]) == "function") {
  5.         this["mc1"]["play"].call();
  6.     }

Tendrías que validar algunas cosas, ¿Que sucede si escriben mal el nombre del MovieClip o el nombre de la función?, etc.

Saludos,
  #7 (permalink)  
Antiguo 14/09/2009, 15:28
 
Fecha de Ingreso: septiembre-2009
Mensajes: 14
Antigüedad: 14 años, 7 meses
Puntos: 0
Respuesta: Terminal de comandos en Flash AS3.0

Hola, muchas gracias por la ayuda de los dos, para Eskombro, lo que me refiero, es que me explicaste que lo que puedo hacer es hacer un sistema de que si el usuario escribe algo, que se valide y luego se ejecute, lo que yo digo, es que si hay forma, de que el usuario, en un campo de texto, escriba el nombre del objeto que quiere modificar, y en otro la accion, pongo un ejemplo aunque ya intente y no funciono.

Código:
if (textoaccion.text == ".visible = false") {
textoconobjetoamodificar.visible = false;
}
"textoconobjetoamodificar" seria el campo de texto con el nombre del movieclip (nombre de la instancia) y "textoaccion" seria donde escribirá que acción ejecutaría, entonces el usuario tendría que escribir, en un campo de texto el objeto y en otro la acción, y luego, al presionar un botón, el sistema valida la acción y la aplica al objeto que esta en el otro campo de texto, espero que me entiendas.

para HackmanC, ¿me podrías explicar paso por paso el código? muchas gracias por la ayuda.
  #8 (permalink)  
Antiguo 14/09/2009, 15:56
Avatar de jahepi
Colaborador
 
Fecha de Ingreso: diciembre-2004
Ubicación: Querétaro
Mensajes: 1.124
Antigüedad: 19 años, 4 meses
Puntos: 43
Respuesta: Terminal de comandos en Flash AS3.0

Cita:
Iniciado por JK994 Ver Mensaje
Hola, quisiera saber si hay forma de que en un campo de texto, escriba "root.Moviecip1.visible=false" y al presionar un botón, el MC "Movieclip1" desaparezca y así con cualquier objeto del escenario, es decir, que pueda tener una "miniconsola" de ActionScript ejecutando en tiempo real.

gracias.
Hola JK994 !

Si solamente quieres el nombre de instancia del objeto, y el método a llamar, podrías hacerlo de la siguiente forma:

Código actionscript:
Ver original
  1. var objStr:String = "mc";
  2. var methodStr:String = "gotoAndStop";
  3. var param:Number = 25;
  4.  
  5. this[objStr][methodStr](param); //Evaluación de lo recibido por consola.

Desde la consola recibes las 2 cadenas, una para la instancia y otra para el método, flash se encargaría de evaluarlo de la forma que lo he puesto al último.

Un saludo y suerte !
__________________
Una contraseña es como la ropa interior. No deberías dejarlas afuera a la vista de otras personas, deberías cambiarla regularmente, y ni se te ocurra prestarla a extraños.
  #9 (permalink)  
Antiguo 14/09/2009, 18:56
Avatar de HackmanC  
Fecha de Ingreso: enero-2008
Ubicación: Guatemala
Mensajes: 1.817
Antigüedad: 16 años, 2 meses
Puntos: 260
Sonrisa Respuesta: Terminal de comandos en Flash AS3.0

Cita:
Iniciado por JK994 Ver Mensaje
... para HackmanC, ¿me podrías explicar paso por paso el código? muchas gracias por la ayuda.
Básicamente es lo mismo que te explica jahepi.

Cita:
Iniciado por jahepi Ver Mensaje
Código actionscript:
Ver original
  1. var objStr:String = "mc";
  2. var methodStr:String = "gotoAndStop";
  3. var param:Number = 25;
  4.  
  5. this[objStr][methodStr](param); //Evaluación de lo recibido por consola.
Cita:
Iniciado por HackmanC Ver Mensaje
Código actionscript:
Ver original
  1. btnButton.addEventListener(MouseEvent.CLICK, clickHandler);
  2. function clickHandler(event:MouseEvent):void {
  3.  
  4.     // txtText1.text ~ Nombre del MC
  5.     // txtText2.text ~ Propiedad o Método
  6.     // Otros txtTexts...
  7.  
  8.     if (typeof(this[txtText1.text][txtText2.text]) == "boolean") {
  9.         this[txtText1.text][txtText2.text] = false;
  10.     }
  11.     if (typeof(this[txtText1.text][txtText2.text]) == "function") {
  12.         this[txtText1.text][txtText2.text].call();
  13.     }
  14. }
Tienes que colocar un component Button (nombre de la instancia: btnButton) y dos components TextArea (nombre de las instancias: txtText1, txtText2) en el MovieClip principal. Y escribir el código anterior en el 'frame 1' del timeline.

btnButton.addEventListener se utiliza para amarrar el evento CLICK del botón con una función; es decir, la función que se ejecuta al presionar el Button.

Lo demás es bastante difícil de explicar por que lleva muchos conceptos diferentes.

this[txtText1.text][txtText2.text] <-- Explicar esto se me hace muy difícil Busca información sobre 'this' y Arrays.
En el ejemplo solo escribí 'boolean' y 'function' para que busques mas información sobre 'typeof', y puedas manejar Integer, Strings, etc.

Y aunque se puede escribir this[txtText1.text][txtText2.text](), dejé como ejemplo call(), para que buscaras mayor información sobre call() y apply(), en el caso que el método tengan muchos parámetros. Como por ejemplo: .apply(null, txtText3.text), donde txtText3 sería un nuevo TextArea donde escriben los parámetros a aplicar al método, que puede llevar 1, 2, 3 o N parámetros.

Saludos,
  #10 (permalink)  
Antiguo 16/09/2009, 15:33
 
Fecha de Ingreso: septiembre-2009
Mensajes: 14
Antigüedad: 14 años, 7 meses
Puntos: 0
Respuesta: Terminal de comandos en Flash AS3.0

Muchas gracias a todos, de verdad, ya voy teniendo claros los conceptos, ahora, me gustaría saber algo, con estos códigos, significa que si puedo ejecutar acciones en el swf en tiempo real? si es así, entonces podría ser solamente un campo te texto donde pueda escribir fácilmente "btn1.visible = false;" y al presionar un botón esta acción se realice (que es lo que quiero).

perdón por las molestias, soy novato, pero confío en que puedo resolver esto con su ayuda :D gracias!

Hice un intento con este codigo:

Código:
Act.addEventListener (MouseEvent.CLICK, realize);

pr.visible = false;
var campotextoobjeto;
campotextoobjeto=campotextoobj.text;

function realize(event:MouseEvent):void {
	if(campotexto.text=="visible = true"){
		campotextoobjeto.visible = true;
	}
}
donde en el campotextoobj escribo "pr." y en campotexto escribo "visible = true", el problema es que al ejecutarlo, me muestra el siguiente error:
ReferenceError: Error #1056: No se puede crear la propiedad visible en String.
at Sinti_fla::MainTimeline/realize()


al usar el código que me dieron, y aplicarlo al botón y a los textimput, al presionar el botón, me sale el siguiente error:

TypeError: Error #1010: Un término no está definido y no tiene propiedades.
at Sinti_fla::MainTimeline/clickHandler()


por favor ayudenme, gracias.
  #11 (permalink)  
Antiguo 16/09/2009, 22:27
Avatar de HackmanC  
Fecha de Ingreso: enero-2008
Ubicación: Guatemala
Mensajes: 1.817
Antigüedad: 16 años, 2 meses
Puntos: 260
Sonrisa Respuesta: Terminal de comandos en Flash AS3.0

Hola,

Cita:
Iniciado por JK994 Ver Mensaje
... es decir, que pueda tener una "miniconsola" de ActionScript ejecutando en tiempo real. ...
Cita:
Iniciado por Eskombro Ver Mensaje
Pues a mi modo de ver no tienes forma de trasferir el texto que escribas en un campo de texto al codigo de la aplicación.
Cita:
Iniciado por JK994 Ver Mensaje
... con estos códigos, significa que si puedo ejecutar acciones en el swf en tiempo real? si es así, entonces podría ser solamente un campo te texto donde pueda escribir fácilmente "btn1.visible = false;" y al presionar un botón esta acción se realice (que es lo que quiero).
Al igual que Eskombro, yo también creo que ya no es posible hacerlo en AS3.

Cita:
Iniciado por JK994 Ver Mensaje
... al usar el código que me dieron, y aplicarlo al botón y a los textimput, al presionar el botón, me sale el siguiente error: ...
Antes de presionar el botón, tenías que poner en el primer "TextArea" el nombre de un control. Y en el segundo "TextArea" el nombre de una propiedad o método de ese control.

Antes que nada tienes que comprender como funciona, creo que al igual que jahepi solo escribimos un ejemplo, hacerlo funcionar efectivamente depende de como lo entendiste e interpretaste. Si buscas un ejemplo terminado y funcionando conforme tus expectativas, eso es diferente y posiblemente alguien más pueda explicarlo más detalladamente.

Saludos.
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




La zona horaria es GMT -6. Ahora son las 14:36.