2010-02-19 17 views
22

¿Cómo puedo formatear una cadena con las variables suministradas en AS3?Actionscript 3.0 Cadena con formato?

//vars 
var myNumber:Number = 12; 
var myString:String = "Months"; 
var myObject:MovieClip = year; 

//string 
myString.txt = "One (?) consists of (?) consecutive (?)", string(myObject), string(myNumber), myString; 

por lo que en la cadena anterior, me gustaría miCadena para mostrar "durante un año consta de 12 meses consecutivos", pero yo soy nuevo en AS3 y no sé cómo formatear correctamente una cadena.

Estoy seguro de que tendré que convertir la variable numérica en una cadena, cadena (myNumber), pero no sé si se va a convertir una variable de clip de película en una cadena, string (myMovieClip), volverá el nombre del clip de película o producir un error. Estoy dispuesto a apostar por el más tarde.

Respuesta

46

Las respuestas a this similar question sugieren utilizar la clase Formatter o StringUtil.substitute().

Este último parece el más simple; en su caso, se usaría así:

var str:String = "One {0} consists of {1} consecutive {2}"; 
var newString:String = StringUtil.substitute(str, myObject, myNumber, myString); 

substitute() debe emitir de forma automática sus argumentos para cuerdas, pero no estoy seguro de si, como en su código, puede convertir un clip de película (myObject) como una cadena .

Otra buena opción, especialmente si ha usado printf en otros lenguajes de programación, es third-party printf-as3 function.

1

objetos de fundición a cadenas

El método toString() se define en la clase Object. Entonces, todos los objetos tienen este método definido para ellos. Llamar a myObject.toString() por lo general le dará lo que está buscando. Ciertos objetos definen métodos adicionales, como date.getHours(), que devuelve descripciones de cadenas del objeto en un formato diferente del proporcionado por getString().

Para tipos nativos como int, puede transmitir utilizando String (myInt).

cadenas Concatenación juntos

A continuación, puede sumar las diferentes partes de una cadena de la siguiente manera:

var myString:String = "There are " + String(24) + " hours in a day." 

Espero que ayude, de Dave

0

El camino más corto que había hacerlo es algo así como:

var finalString:String = "One " + myObject + " consists of " + myNumber + " " + myString; 

Una comilla simple o doble inicia un literal de cadena. Si usa el símbolo + para agregar algo a un literal de cadena, va a llamar automáticamente aString() en ese objeto.

myObject devolverá [Object MovieClip], sin embargo. Lo que quiere hacer es crear una clase personalizada que amplíe MovieClip y luego anule el método protegido toString() para devolver la cadena que desee escupir.

Espero que ayude!

+0

myObject.name parece funcionar. var finalString: String = "One" + myObject.name + "consiste en" + myNumber + "" + myString; – TheDarkIn1978

+0

myObject.nombre solo funcionará si A) myObject está en el escenario y tiene un nombre de instancia o si B) configuró manualmente myObject.name en algún lugar previamente. .name es una propiedad de cadena de cualquier DisplayObject, creo. Está ahí para una mejor integración en Flash IDE (es decir, para que pueda poner cosas en el escenario) o para casos específicos donde necesita nombrar cosas para que pueda usar getChildByName(). Aún así, ¡me alegro de que ayude! Es mucho más fácil simplemente usar el operador + para ensamblar cadenas complejas en Flash. ¡Aclamaciones! – Myk

Cuestiones relacionadas