2010-02-19 3 views
22

Wie kann ich einen String mit den gelieferten Variablen in AS3 formatieren?Actionscript 3.0 Zeichenfolge mit Format?

//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; 

so in der Zeichenfolge oben, würde Ich mag myString anzuzeigen „Ein Jahr 12 aufeinanderfolgende Monate besteht aus“, aber ich bin neu in AS3 und nicht wissen, wie man richtig einen String formatiert werden.

Ich bin mir sicher, dass ich die Zahlenvariable in eine Zeichenfolge string (myNumber) umwandeln muss, aber ich weiß nicht, ob eine Movieclipvariable an eine Zeichenfolge, String (myMovieClip) zurückgibt der Name des Movieclips oder einen Fehler erzeugen. Ich bin wetten auf das spätere.

Antwort

46

Die Antworten auf this similar question empfehlen die Verwendung der Formatter Klasse oder StringUtil.substitute().

Letzteres sieht am einfachsten aus; in Ihrem Fall würden Sie es wie folgt verwenden:

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

substitute() sollte ihre Argumente in dem String automatisch werfen, aber ich bin nicht sicher, ob, wie in Ihrem Code können Sie einen Movieclip (myObject) als String gegossen .

Eine weitere gute Option, besonders wenn Sie printf in anderen Programmiersprachen verwendet haben, ist dies third-party printf-as3 function.

1

Casting Objekte

Die Methode toString() ist definiert auf der Objektklasse Saiten. Also haben alle Objekte diese Methode für sie definiert. Der Aufruf von myObject.toString() wird Ihnen daher normalerweise das geben, wonach Sie suchen. Bestimmte Objekte definieren zusätzliche Methoden wie date.getHours(), die String-Beschreibungen des Objekts in einem anderen Format als das von getString() bereitgestellte zurückgeben.

Für native Typen wie int können Sie mit String (myInt) umwandeln.

Strings verketten zusammen

können Sie dann zusammen fügen Sie die verschiedenen Teile einer Zeichenfolge wie folgt:

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

Hoffnung, die hilft Dave

0

Der kürzere Weg würde ich es ist etwas wie:

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

Ein einzelnes oder doppeltes Anführungszeichen leitet ein Zeichenfolgenliteral ein. Wenn Sie das Symbol + verwenden, um etwas an ein Zeichenfolgenliteral anzuhängen, wird automatisch toString() für dieses Objekt aufgerufen.

myObject wird jedoch [Objekt MovieClip] zurückgeben. Sie möchten eine benutzerdefinierte Klasse erstellen, die MovieClip erweitert und anschließend die geschützte Methode toString() überschreibt, um die Zeichenfolge zurückzugeben, die Sie ausgeben möchten.

Hoffe, dass hilft!

+0

myObject.name scheint zu funktionieren. var finalString: String = "Eins" + myObject.name + "besteht aus" + myNumber + "" + myString; – TheDarkIn1978

+0

myObject.name funktioniert nur, wenn A) myObject auf der Bühne steht und einen Instanznamen hat oder wenn B) myObject.name manuell irgendwo zuvor gesetzt wurde. .name ist eine String-Eigenschaft eines beliebigen DisplayObject, glaube ich. Es ist dort für eine bessere Integration in die Flash IDE (dh damit Sie Dinge auf die Bühne bringen können) oder für spezielle Fälle, in denen Sie Dinge benennen müssen, damit Sie getChildByName() verwenden können. Trotzdem, froh das hilft! Es ist viel einfacher, einfach den Operator + zu verwenden, um komplexe Strings in Flash zu erstellen. Prost! – Myk