Comunidad de diseño web y desarrollo en internet online

Incluir .txt en archivo .fla

Citar            
MensajeEscrito el 30 Oct 2010 03:58 pm
Hola!
Estoy tratando de adquirir algún conocimiento en as3, pero doy una y otra vez con pantallazo de error en la frente jeje...

Lo que trato de hacer es:

Cargar un archivo .txt que tendrá definiciones para luego trabajar sobre estas. Es un juego de preguntas y respuestas bastante sencillo. Se cargan las definiciones y se presenta una al azar en la pantalla para contestar.

He utilizado para leer .txt el archivo esto:

var definiciones:URLLoader = new URLLoader();
definiciones.addEventListener(Event.COMPLETE, onLoaded);
definiciones.load(new URLRequest("prueba.txt"));

Hasta aquí bien porque me sale pero no había caido en que si luego quiero mandar la peli .swf he de mandar también el .txt y menuda gracia un juego que viene con las respuestas adjuntas.

No sé cual sería la forma más práctica -si la hay- de incluir este archivo txt como un recurso más. Como si formara parte de la biblioteca y fuera luego ya compilado en la misma peli. No sé si me explico.

Porque copiar y pegar todas las definiciones en el código pues me parece un poco cutrillo. ¿Alguien me puede dar una pista?
Gracias

Por CLAnonimo

Claber

600 de clabLevel

5 tutoriales
1 articulo

 

Este es un usuario anónimo genérico para las cuentas borradas o perdidas.

chrome
Citar            
MensajeEscrito el 31 Oct 2010 01:54 am
Hola, bueno, de lo que estas tratando es de cargar información de archivos externos, con esto ya te dije que si quieres usar este método pues como su nombre lo dice, necesitas el archivo externo, o sea, el archivo .txt lo necesitarías. Por lo tanto, lo que te sugiero, es que uses algún tipo de variable para guardar información, a menos de que vayas a usar una base de datos, pero no creo. Entonces, puedes usar Arrays, creo que sería lo más práctico, me explico, lo que se me ocurrio al leer tu post es que puedes crear un array por pregunta, de esta manera:

[[Pregunta1]->[respuesta1], [respuesta2], [respuesta3]] de manera que [Pregunta1] sería un array conteniendo las respuestas [1,2,3] como variables de texto o lo que sean las respuestas.
jaja espero te sirva, en realidad si pones las respuestas en el código te asegura más la "confidencialidad" XD

Por hormy1

Claber

124 de clabLevel



 

firefox
Citar            
MensajeEscrito el 31 Oct 2010 12:51 pm
Muchas gracias por la atención hormy.
Entonces si te he entendido bien, tengo que olvidarme por completo del archivo txt y meter su contenido en la propia película.
No hay forma de meterlo tal cual o parecido a la biblioteca (o donde sea) y llamarlo desde allí...
Mi archivo de texto tiene esta forma:

"pregunta1;respuesta1(salto de línea)
pregunta2;respuesta2
pregunta3;respuesta3
pregunta4;respuesta4
(etc)"

esta información del txt la llamo desde el .fla y ya paso la primera y la seguna parte de cada línea a un array. Luego al azar cojo una línea y ofrezco la primera parte en pantalla para que la persona en un campo de texto conteste. Esto lo tengo en marcha lo único que quería era evitarme el archivo txt externo.
¿Este .txt no se podría cargar desde un fichero .as y luego al generar la peli .swf la información fuera incrustada?
gracias!

Por CLAnonimo

Claber

600 de clabLevel

5 tutoriales
1 articulo

 

Este es un usuario anónimo genérico para las cuentas borradas o perdidas.

chrome
Citar            
MensajeEscrito el 31 Oct 2010 01:36 pm
BuenAS:

Podrías, en lugar de un txt, utilizar un xml:

Código XML :

<preguntas>
      <pregunta>
            <encabezado>¿Quién descubrió américa?</encabezado>
            <respuesta>Cristobal Colón</respuesta>
      </pregunta>
      <pregunta>
            <encabezado>Apellido de Paris</encabezado>
            <respuesta>Hilton</respuesta>
      </pregunta>
</preguntas>


Este xml lo incrustas en el swf con:

Código ActionScript :

[Embed](
      source='rutaDeTuXmlEnTuUnidadDedisco',
      mimeType='application/octet-stream'
)]
var ClaseXmlIncrustado:Class;

var ba:ByteArray = new ClaseXmlIncrustado();
var xml:XML = new XML(ba.readUTFBytes(ba.length));



en xml tienes tus preguntas y respuestas. Asi, si haces:

Código ActionScript :

trace(xml.pregunta[1].encabezado);


deberías obtener "Apellido de Paris"

He escrito aquí directamente, por lo que pueden haber erratas.

Un saludo.

Por Lukánicos

Claber

468 de clabLevel



Genero:Masculino  

chrome
Citar            
MensajeEscrito el 31 Oct 2010 01:40 pm
Si antes lo digo, sobra un corchete en el anterior código:

Código ActionScript :

[Embed( 
      source='rutaDeTuXmlEnTuUnidadDedisco', 
      mimeType='application/octet-stream' 
)] 
var ClaseXmlIncrustado:Class;


como decía, pueden haber errores, haz que Flash te chequee el código, por si me he olvidado de cerrar algún paréntesis, o alguna palabra clave está mal escrita :)

Por Lukánicos

Claber

468 de clabLevel



Genero:Masculino  

chrome
Citar            
MensajeEscrito el 31 Oct 2010 02:12 pm
Muchas gracias Lukánicos.
Tiene muy buena pinta.
Aunque encuentro un inconveniente que no sé si piensas pueda tener alguna "solución" y es q el listado que tengo preparado tiene más de 800 preguntas y respuestas. Esto habría forma de convertirlo a xml de forma automática?...
Por otra parte, al igual q se incrusta la información de un xml, ¿por qué no se puede incrustar la información del .txt? Perdón si la pregunta es muy tonta.

Por CLAnonimo

Claber

600 de clabLevel

5 tutoriales
1 articulo

 

Este es un usuario anónimo genérico para las cuentas borradas o perdidas.

chrome
Citar            
MensajeEscrito el 31 Oct 2010 02:27 pm
BuenAS:

En principio no habría mayor problema, lo que pasa es que obtendrías una cadena de texto, y dentro de esa cadena de texto tendrías que ir buscando tus preguntas y respuestas.

Código ActionScript :

[Embed(
   source='rutaDeTuDiscoDuro/preguntas.txt',
   mimeType="application/octet-stream"
)]
private var ClaseDocumentoTexto:Class;

var ba:ByteArray = new ClaseDocumentoTexto();
var textoPreguntas:String = ba.readUTFBytes(ba.length);
trace("Texto :", textoPreguntas);



¿Tienes alguna posibilidad de pasar a xml las preguntas y respuestas? Si las tienes en Access o Excel puedes exportarlas a xml. O incluso con un procesador de textos PLANO podrías sustituir los saltos de línea de tu documento por etiquetas xml y darle formato xml. La estructura que puse antes no tiene por qué ser esa, puedes adoptar la que te interese. Eso sí, después debes acceder a cada nodo del xml en función de cómo lo hayas estructurado.

Un saludo.

Por Lukánicos

Claber

468 de clabLevel



Genero:Masculino  

chrome
Citar            
MensajeEscrito el 31 Oct 2010 02:33 pm
...con procesador de textos plano me refiero a un editor similar al bloc de notas de Windows, por ejemplo, que no mete formato enriquecido en los textos. NO EDITES el xml con Word, o programas similares, y de hacerlo guárdalo como texto plano y codificación utf-8.

Por Lukánicos

Claber

468 de clabLevel



Genero:Masculino  

chrome
Citar            
MensajeEscrito el 31 Oct 2010 07:10 pm
voy a trastear con todo lo q me comentas.
A ver si saco algo en claro, me has dado muchas ideas! Muchas gracias!
por cierto muy bueno vuestro blog!

Por CLAnonimo

Claber

600 de clabLevel

5 tutoriales
1 articulo

 

Este es un usuario anónimo genérico para las cuentas borradas o perdidas.

chrome
Citar            
MensajeEscrito el 02 Nov 2010 05:39 pm
He probado primero a embeber o como se diga, el .txt con el código q me has pasado creando una función para probarlo:

function test():void{

[Embed(
source='prueba.txt',
mimeType="application/octet-stream"
)]
var ClaseDocumentoTexto:Class;

var ba:ByteArray = new ClaseDocumentoTexto();
var textoPreguntas:String = ba.readUTFBytes(ba.length);
trace("Texto :", textoPreguntas);

}

test();

y me está dando este error: TypeError: Error #1009: No se puede acceder a una propiedad o a un método de una referencia a un objeto nulo.
:(
alguna sugerencia?

Por CLAnonimo

Claber

600 de clabLevel

5 tutoriales
1 articulo

 

Este es un usuario anónimo genérico para las cuentas borradas o perdidas.

chrome
Citar            
MensajeEscrito el 02 Nov 2010 06:52 pm
BuenAS:

El meta tag Embed se coloca en la zona donde colocarías una propiedad de una clase o, si como creo estás escribiendo en un fotograma del timeline, directamente, en el mismo sitio que declararías cualquier variable; nunca lo he colocado dentro de una función y, aunque no lo he probado, posiblemente sea la causa del error. El resto sí puedes, si lo estimas oportuno, dejarlo dentro de una función.

Por otro lado, en source debes dar la ruta a tu txt, en tu disco duro. Tal como está ahora, prueba.txt debería estar en la carpeta donde tienes el fla.

Un saludo.

Por Lukánicos

Claber

468 de clabLevel



Genero:Masculino  

chrome
Citar            
MensajeEscrito el 04 Nov 2010 01:12 pm
Hola!
Esto sigue sin rular... que lio...
¿Lo que no me queda claro es cómo se asocia el meta tag [Embed (bla bla bla] a la variable var ClaseDocumento:Class que viene inmediatamente después???; porque ahora lo he sacado de la función y da un error q no entiendo- pero q supongo por la pinta q tiene, de q me lo q me dice es que es q falta esta asociación...

"TypeError: Error #1007: Instantiation attempted on a non-constructor.
at PREGUNTAS_fla::MainTimeline/test()
at PREGUNTAS_fla::MainTimeline/PREGUNTAS_fla::frame1()
TypeError: Error #1009: Cannot access a property or method of a null object reference.
at PREGUNTAS_fla::MainTimeline/desactivar()
at PREGUNTAS_fla::instrucciones_20/PREGUNTAS_fla::frame1()
muchas gracias de antemano!

Por CLAnonimo

Claber

600 de clabLevel

5 tutoriales
1 articulo

 

Este es un usuario anónimo genérico para las cuentas borradas o perdidas.

firefox
Citar            
MensajeEscrito el 04 Nov 2010 01:58 pm
BuenAS:

Echa un vistazo a este ejemplo:

IncrustarTexto

Van dos versiones, una para CS4 y otra para CS5.

Un saludo.

Por Lukánicos

Claber

468 de clabLevel



Genero:Masculino  

chrome
Citar            
MensajeEscrito el 04 Nov 2010 10:10 pm
Anda! Yo creo q ya sé qué pasaba!

Resulta q yo estoy con un CS3 y para abrir el archivo he bajado un CS5 de prueba y lo que veo es que la etiqueta Embed y mimeType el Cs3 no las reconoce!! No las pinta de azul se quedan negras. Como si no las tuviera reservadas. Y pruebo el código me dice que:
TypeError: Error #1007: Se intentó crear una instancia en un tipo no constructor.
at TextoIncrustadoCS3_fla::MainTimeline/test()
at TextoIncrustadoCS3_fla::MainTimeline/TextoIncrustadoCS3_fla::frame1()

pero en CS5 sí que va... :?

Esto es normal? Si en el Cs3 estoy trabajando en AS·3... Tengo q "migrar" a CS5?? :lol:



Por cierto, muchísimas gracias por el ejemplo.

Por CLAnonimo

Claber

600 de clabLevel

5 tutoriales
1 articulo

 

Este es un usuario anónimo genérico para las cuentas borradas o perdidas.

chrome
Citar            
MensajeEscrito el 04 Nov 2010 10:32 pm
BuenAS:

Pues sí, al menos necesitarías Flash CS4; CS3 aún NO implementaba esta funcionalidad. A mí particularmente me resulta de gran ayuda, no sólo para incrustar xml's, sino sobre todo, fuentes. Incrustar una fuente en un swf con Embed no te exige tenerla instalada.

Un saludo.

Por Lukánicos

Claber

468 de clabLevel



Genero:Masculino  

chrome
Citar            
MensajeEscrito el 05 Nov 2010 09:32 am
Muchas gracias otra vez Lukkánicos...

Finalmente como en este otro ordenador solo tengo el CS·3 ltrasteando lo que probé fue traerme el texto desde un archivo .as.
Me lo he abierto y en el .as he puesto:

var defis:String = ( <![CDATA[
pregunta1;respuesta1;
pregunta2;respuesta2;
pregunta3;respuesta3;
.
.
.
]]> ).toString();
Al principio lo hice con una string normal, pero la cadena daba problemas porque no dejaba traer saltos de líneas pero un compañero buscando en internet ha encontrado la etiqueta esta rara del CDATA.
Luego con un
include "definiciones.as"
en el .fla ya las tenía jejje
Pero me resulta muy interesante lo que me comentas del CS5 para incrusta las fuentes.
Pensaba q no tendría problemas ya que mirando por este foro encontré que podriá hacerlo así:

var fuentearcadepix:mifuente=new mifuente();
var txt_fmt:TextFormat = new TextFormat();
txt_fmt.font = fuentearcadepix.fontName;
txt_fmt.color = 0xFF0000;
txt_fmt.size = 16;

myTextField_txt.y = 300;
myTextField_txt.multiline = false;

myTextField_txt.defaultTextFormat=txt_fmt;
myTextField_txt.embedFonts=true;
myTextField_txt.setStyle("TextFormat", format);

pero me da este error:
1061: Llamada a un método setStyle posiblemente no definido mediante una referencia con tipo estático flash.text:TextField.
1120: Acceso a una propiedad format no definida.

Dicho todo esto, con el CS3 no voy a poder incrustar las fuentes?
Esto es un no parar. Ya no sé como darte las gracias.

Por CLAnonimo

Claber

600 de clabLevel

5 tutoriales
1 articulo

 

Este es un usuario anónimo genérico para las cuentas borradas o perdidas.

firefox
Citar            
MensajeEscrito el 05 Nov 2010 10:24 am
BuenAS:

<![CDATA[]]> te permite poder escribir cualquier caracter de los "raros" que puede ser malinterpretado por el compilador. Si sólo te da problemas el salto de línea, en ActionScript se puede introducir en una cadena de texto con /n. Donde quieras que aparezca un salto de línea escribes /n y te lo hace.

Por otro lado, lo de incrustar las fuentes con el meta tag Embed es el equivalente a incrustar una fuente desde la biblioteca de Flash; o sea, cuando en la biblioteca añades una fuente y la exportas para ActionScript. El código que pones me ha despistado un poco, las fuentes no se instancian; lo que se instancia es el formato (TextFormat) que utiliza dicha fuente, además, este formato se asignará al formato de los TextField (campos de texto) que quieras que aparezcan con dicha fuente. O sea, que creo que lo he liado bastante:

1. Exportas una fuente para AS, en la biblioteca; o utilizas Embed para incrustarla.

2. Creas un TextFormat con dicha fuente.

3. Creas campos de texto (TextField) con embedFonts = true (para que utilice la fuente incrustada en el swf) y les asignas el anterior TextFormat.

Un saludo.

Por Lukánicos

Claber

468 de clabLevel



Genero:Masculino  

chrome

 

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