Comunidad de diseño web y desarrollo en internet online

Cambiar texto dinámico desde diferente clase

Citar            
MensajeEscrito el 13 Ago 2012 12:05 am
Hola, pues tengo un proyecto en flash, en el mismo Main.fla he puesto un texto dinámico llamado nombretext, si en la clase de Main.fla > Main.as llamo a ese texto:

Código ActionScript :

public function Main()
{
   nombretext.text = "h";
   trace(nombretext.text);
}


Y funciona perfectamente, ahora, cuando quiero editar ese texto dinámico desde otra clase del mismo proyecto pues no puedo, no se como hacer que desde una clase diferente, pueda cambiar el nombretext, en AS2 se podría hacer con _root. pero aquí no se como será, espero que solisarg o alguien me pueda responder, muchas gracias.

Por seyder

50 de clabLevel



 

chrome
Citar            
MensajeEscrito el 13 Ago 2012 02:05 pm
EN AS3 _root es root, sin el guion bajo. Además probablemente tengas que hacer un CAST para evitar errores de compilación, por ejemplo

TextField(root.nombretext).text = "h"

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 13 Ago 2012 03:24 pm
Jorge, me sigue dando el mismo error, he puesto lo que me has dicho

Código ActionScript :

TextField(root.nombretext).text = "h";

Y sin el root. también he probado pero me sigue dando el siguiente error:

1119: Acceso a una propiedad nombretext posiblemente no definida mediante una referencia con tipo estático flash.display:DisplayObject.

Creo saber el error, estoy intentando cambiar le texto desde otra clase, y para hacerlo el textfield tendría que ser estático, pero no se como ponerlo estático al crearlo desde flash.

Muchas gracias jorge, espero que me lo puedas solucionar, espero impaciente tu respuesta.

Por seyder

50 de clabLevel



 

chrome
Citar            
MensajeEscrito el 13 Ago 2012 03:25 pm
Supongo que lo estas creando manualmente en el escenario, y que en opciones de publicación tienes puesto que declare automáticamente lasinstancias del escenario

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 13 Ago 2012 04:05 pm
Si está puesto, pero lo que yo quiero es declararlo manualmente, ¿Cómo lo puedo hacer?

Gracias

Por seyder

50 de clabLevel



 

chrome
Citar            
MensajeEscrito el 13 Ago 2012 04:09 pm
En la clase que lo contiene

public var miCampo:TextField

Si lo que quieres es crearlo por código, instancias el TextField y haces un addChild

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 13 Ago 2012 04:21 pm
No entiendo a que te refieres, lo que yo quiero es que nombretext tenga modificador public static, para llamarlo desde otra clase, ¿cómo lo puedo hacer?
Gracias

Por seyder

50 de clabLevel



 

chrome
Citar            
MensajeEscrito el 13 Ago 2012 04:26 pm
Es un problema de scope, la clase B tiene que acceder a cualquier propiedad de la clase A (textfield o variable, mientras sea pública) Mira como comunicas las clases, hacerlo estático es un error porque realmente quieres acceder a una instancia (no necesariamente a un singleton)
Cuentanos cual es la relación entre ambas clases (¿por que una debería saber de la otra?)

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 13 Ago 2012 04:39 pm
La clase B conecta con un servidor vía sockets y tiene que cambiar cosas de A, he sido capaz de instan ciar B en A, pero no al contrario (no se como).

Por seyder

50 de clabLevel



 

chrome
Citar            
MensajeEscrito el 13 Ago 2012 04:59 pm
Ok, si instancias B en A (composición), agrega un método público en b que cree la referencia, por ejemplo

Código ActionScript :

var owner:DisplayObject
...
public function setOwner(d:DisplayObject):void{
   owner = d;
   //el textfield estará en owner.campodeTexto
}


Desde A lo llamas

setOwner(this)

Si A no extiende de DisplayList cambia el tipo adecuadamente

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 13 Ago 2012 05:13 pm
Ahora el texto no se muestra, pero no salen errores

Por seyder

50 de clabLevel



 

chrome
Citar            
MensajeEscrito el 14 Ago 2012 02:30 pm
FastFood.fla > un texto dinámico llamado nombretext

FastFood.as

Código ActionScript :

Código ActionScript :

package 
{
   import flash.display.MovieClip;
   import flash.text.*;
   public class FastFood extends MovieClip
   {
      public var Socket:Conexion;
      public var MiUsuario:Usuario;

      public function FastFood()
      {
         Socket = new Conexion("localhost",4000);
         Socket.setOwner(this);
         nombretext.text = "h";
         trace(nombretext.text);
      }
   }
}


El texto se pone una h y se hace el trace perfectamente, ahora en
Conexion.as

Código ActionScript :

package 
{ 
   import flash.text.*; 
   import flash.display.Sprite; 
   import flash.events.ProgressEvent; 
   import flash.events.SecurityErrorEvent; 
   import flash.net.Socket; 
   import flash.events.IOErrorEvent; 
   import flash.events.*; 
   import flash.system.Security; 
   import FastFood; 

   public class Conexion extends Sprite 
   { 

      public static var socket:Socket; 
      public var host:String; 
      public var port:int; 
      var owner:FastFood; 
   
      public function setOwner(d:FastFood):void 
      { 
         owner = d; 
      } 
      public function onSecError(e:SecurityErrorEvent):void 
      { 
         trace("No hay conexión. Error: " + e.text); 
         owner.nombretext.text = "hola"; 
      } 
   } 
} 


Pues sale en race "No hay error. Error: tal tal", y después no se pone hola en nombretext
Sin errores.

Espero que me puedas ayudar jorge

Por seyder

50 de clabLevel



 

chrome
Citar            
MensajeEscrito el 14 Ago 2012 02:39 pm
Socket es un mal nombre de propiedad ya que es elnombre de una clase existente (flash.net.Socket)
No veo constructor que tome los parámetros que le pasas, si existe pero no lo posteaste, mira si has puesto el listener para el error apuntando a onSecError, y si lo has hecho verifica que onSecError no se esté ejecutando antes de setOwner, en cuyo caso owner será undefined (de paso lo puedes trazar)

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 14 Ago 2012 02:59 pm
En Setowner he puesto un trace:

public function setOwner(d:FastFood):void
{
owner = d;
trace(owner);
}

Y pasa este trace:

[object FastFood]
h
No hay conexión. Error: Error #2031: Error de socket. URL: localhost

No se pone el "hola" al final ni se hace el trace.

Por seyder

50 de clabLevel



 

chrome
Citar            
MensajeEscrito el 14 Ago 2012 03:09 pm
El tema es saber que se ejecuta antes (en el caso de las excepciones el que salga después no garantiza el orden) Pon

Código ActionScript :

  public function onSecError(e:SecurityErrorEvent):void 
      { 
    trace("owner es "+owner)
    owner.nombretext.text = e.text; 
 }


Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 14 Ago 2012 03:23 pm
Jorge, tienes razón ese código funcionaba, puse tu trace y vi que no se mostraba nada, ¡¡y es que puse que si había otro error pusiese ese mismo código!!

En resumen tu código esta perfecto, de nuevo Jorge, otro problema solucionado ¡¡gracias jorgito!!

Por seyder

50 de clabLevel



 

chrome

 

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