Maniac Mansion Mania Forum
MMM-Werkzeugkiste => Technik => Thema gestartet von: Mister L am 22. Juni 2008, 17:53:29
-
AGS hat da bereits eine eingebaute Funktion für einen Highscore.
Frage: Ist es möglich auch mehrere Scores im gleichen Game zu erstellen?
Wie müsste so eine Funktion aussehen? :-\
-
Du brauchst im Grunde keine Funktionen, nur einen globalen array.
Mit Funktionen:
// header
import int myscore[10];
import function GivScore(int s, int points);
// global script, nach on_event
int myscore[10]; export myscore;
function GivScore(int s, int points) {
myscore[s]+=points;
PlaySound(x);
on_event(eEventGotScore, points);
}
-
Ahja, das sieht übersichtlich aus.
Besten Dank! :)
Kann ich den Score dann auch in einem GUI-Fenster anzeigen lassen?
-
Klar:
label.Text = String.Format("%d", myscore[3]);
-
Dasja einfach. :)
Was wären wir ohne KhrisMUC. :D
-
Vielleicht gründlicher beim manual lesen...? ;)
-
Ich hab das jetzt probiert und natürlich nicht hinbekommen. :P
Es klappt immerhin soweit, dass im Label die 0 steht und ich beim Aufruf der Funktion den angegebenen Sound höre. Nur erhöht sich die Punktzahl nicht?!?
Wie müsste denn jetzt der Befehl lauten um z.B. 20 Punkte zu geben?
-
in khrismucs beispiel gibts das array myscore[10].
damit hast du quasi die möglichkeit 10 verschiedene punktestände anzulegen.
bei der function GiveScore ist der erste parameter für die verwendete variable von den 10 die du verwenden willst, die zweite für den score.
also mit GiveScore(3,20);
hast du der Variable myscore[3] 20 Punkte mitgegeben.
und genau diese variable wird auch mit
label.Text = String.Format("%d", myscore[3]);
ausgegeben.
wenn du GiveScore(1,20); eingibst musst du dementsprechend
label.Text = String.Format("%d", myscore[1]);
eingeben um den Score auszugeben.
-
Ahja, das macht die Sache schon klarer.
Geht nur leider Trotzdem nicht. Es bleibt immer noch bei 0... :-\
Ich hab ein GUI mit einem Label erstellt das sich SCORE2 nennt. Dem hab ich bei "script name" den Name "abc" verpasst und dann bei "Before Fadein" das eingetragen:
abc.Text = String.Format("%d", myscore[3]);
Kann da der Fehler liegen? Muss ich da mit dem Script-O-Name arbeiten?
-
glaub ich eher nicht, schätze eher dass du eine variable anzeigst die vorher noch nicht erhöht wurde.
hast du vorher die funktion so aufgerufen? ->
GiveScore(3,20);
-
Ah jetzt ja! :D
Ich muss den Label-Text nach jeder Veränderung aktualisieren! :o
Bei der eingebauten Score-Funktion reicht ja: GiveScore (20);
Wenn ich
GivScore (3,20);
abc.Text = String.Format("%d", myscore[3]);
eingebe, dann wird's erst angezeigt.
Sowas müsst ihr einem Nichtskönner wie mir doch sagen! ;)
-
Du kannst das auch automatisieren, dann musst Du nur für jeden myscore[X] vorher ein Label festlegen:
// global script
GUILabel*scorelabel[10];
// game_start
scorelabel[3] = abc;
// geänderte Funktion
function GivScore(int s, int points) {
myscore[s]+=points;
if (scorelabel[s] != null) scorelabel[s].Text = String.Format("%d", myscore[s]);
else Display("***Erst scorelabel[%d] festlegen!***", s);
PlaySound(x);
on_event(eEventGotScore, points);
}
-
Okay, das probiere ich mal aus.
Vielen Dank für eure Hilfe. :)