Maniac Mansion Mania Forum
MMM-Werkzeugkiste => Technik => Thema gestartet von: Timer am 16. Juni 2007, 16:46:39
-
Ich habe ein Problem, mit dem ich nun schon seit über einer Stunde kämpfe. Ich möchte an einen String eine Zahl anhängen, die ich in der Form eines Integers gespeichert habe.
Ich habe also einen String (z.B. xxx) und einen int (z.B. 22) und möchte daraus xxx22 machen. Kann mir da jemand weiterhelfen? :-\
-
String s="xxx";
int i=22;
s=s.Append(String.Format("%d", i));
-
Hui, das ging aber schnell! :D
Danke, KhrisMUC! :)
-
Kein Thema, hab gerade zufällig auf die Seite geschaut :)
String.Format unterstützt wie Display diverse Formatierungen: http://new.bigbluecup.com/manual/StringFormats.htm
-
Gut. Soweit, so gut. Aber jetzt habe ich ein neues Problem... Anstatt die Zahlen auszuspucken, die ich erwarte, schreibt das Programm das Wort und dahinter eine achtstellige Zahlenkette, obwohl es einfach nur 40 sein sollte... Das int ist der Wert von einem Schieberegler im GUI (Regler_Zahlen.Value). Ich verstehe leider nicht, wo das Problem liegen könnte. :(
-
Bei mir klappts einwandfrei.
Verwendeter Code?
-
Hier:
function InEpiUmwandeln (int Epinummer){
String s = "Epi";
String i = String.Format ("%d", Epinummer);
EpisodenNummer = s.Append (String.Format ("%d", i));
}
-
Kein Wunder, bei Dir ist es doppelt gemoppelt. ;)
Entweder:
String i = String.Format ("%d", Epinummer);
EpisodenNummer = s.Append (i);
oder gleich:
EpisodenNummer = s.Append (String.Format ("%d", Epinummer));
Du hast den String selbst nochmal als int in einen String gepackt, d.h. AGS hat die Adresse des Strings genommen, deswegen die achtstellige Zahl.
-
Ach so. Danke! :)
-
Ein Problem nach dem anderen... (http://www.maniac-mansion-mania.de/forum/Smileys/classic/rolleyes.gif) :P
Das nun erhaltene Wort ist auch die Bezeichnung eines Strings (xxx22). Ich weiß nur aber leider nicht, wie ich es machen soll, dass der String xxx22 in einer Funktion aufgerufen wird (anstelle des Strings EpisodenNummer).
Beispiel:
Liste.AddItem (EpisodenNummer.Copy ());
soll so behandelt werden wie:
Liste.AddItem (xxx22.Copy ());
Ist das möglich?
-
Nein, das geht nicht.
Der "Inhalt" eines Strings bleibt immer das, er kann nicht zum Variablennamen werden. (In AGS.)
Aber es gibt sicher eine Möglichkeit, das umzusetzen, was Du erreichen möchtest.
"Ich brauche mehr Details!" ;)
-
Na gut, ich schreibe mal den aktuellen Code:
Das ganze ist auf eine Liste der aktuellen MMM-Episoden bezogen (d.h. momentan habe ich erst 40 eingebaut). Regler_Zahlen ist ein Schieberegler, mit dem man dann in einer Liste (List Box) scrollen kann. Ich habe die Strings Epi1-40, denen der jeweilige Episodenname zugewiesen ist.
function Regler_Zahlen_Change(GUIControl *control) {
int i = Regler_Zahlen.Value + 9; //der maximale Wert ist 31, aber ich habe 40 Episoden, deshalb muss neun dazugezählt werden
InEpiUmwandeln (i); //der Code, mit dem ich vorhin Probleme hatte
String Zahl = EpisodenNummer.Copy (); //Das Ergebnis von InEpiUmwandeln
Zahlauswahl.Clear (); //Den aktuellen Inhalt der Liste löschen
Zahlauswahl.AddItem (Zahl.Copy ()); //Hier soll statt Zahl der Inhalt von Zahl stehen
while (i != Regler_Zahlen.Value - 1) //...und genau das ist das Problem.
{ //Mit dem Rest wird die List Box ausgefüllt
i--; //Also Epi23, Epi22, Epi21
InEpiUmwandeln (i); //(in absteigender Reihenfolge)
Zahl = EpisodenNummer.Copy ();
Zahlauswahl.AddItem (Zahl.Copy ());
}
}
-
Wieso scrollst Du nicht direkt die Listbox?
Ich hab das mal getestet, hab eine Listbox gemacht, die 6 der 40 Items anzeigt. Daneben einen Slider, Wert von 1-35; beim verschieben setze ich Listbox.TopItem auf 35-slider.Value; die Scrollpfeile der Listbox selbst lasse ich ausgeblendet.
Funktioniert bestens.
-
Ach herje, wie es scheint, habe ich mir die Sache unnötig verkompliziert... (http://www.maniac-mansion-mania.de/forum/Smileys/classic/rolleyes.gif)
Danke, funktioniert einwandfrei :).
-
Übrigens, "just for reference", der Code ist immer noch reichlich umständlich. ;)
function Regler_Zahlen_Change(GUIControl *control) {
Zahlauswahl.Clear ();
int i = Regler_Zahlen.Value + 9;
while (i >= Regler_Zahlen.Value - 1) {
Zahlauswahl.AddItem (String.Format("MMM %d", i);
i--;
}
}