|
Panel + Window = Lebensbalken?! [GER]
#322825
05/10/10 01:03
05/10/10 01:03
|
Joined: May 2010
Posts: 9
strudi1986
OP
Newbie
|
OP
Newbie
Joined: May 2010
Posts: 9
|
Hallo, bin neu hier und probiere seit einigen Tagen etwas mit der Gratis Version von Gamestudio herum. Ich habe es schon geschafft, eigenständig ein halbwegs vernünftiges Playerscript zu schreiben, was auch einigermaßen nach meinen Vorstellungen funktioniert. Es ist zwar nicht das allerbeste, aber es tut das was es machen soll. Derzeit beschäftige ich mich mit den Panels und Windows und was nicht alles dazu gehört. Aber ich schaffe es nicht, einen einfachen bzw normalen Lebensbalken, wie sie in den meisten Spielen auch anzutreffen sind, einzufügen. Ich habe eine Panel definiert, mit einer 200px breiten Bitmap als Hintergrund. Darin werden 2 Balken dargestellt. Der obere Balken soll die Lebensanzeige werden. Mein Gedankengang war folgender: Ich erstelle im Panel ein Window, dass ebenfalls 200px darstellen soll. Dieses Window bzw die Grafik soll auf der X-Achse verschoben werden. Dazu habe ich vor dem Panel noch eine Variable "player_health" mit dem Wert 100 definiert. Da der Balken 200px breit ist, dachte ich mir, dass die Lebensanzeige die doppelte Breite, also 400px haben muss. 200px rot, 200px schwarz - schwarz soll nicht gesehen werden also habe ich das OVERLAY Flag auch gesetzt. Wenn ich aber die Grafik dann in der Windows Definition einfüge, und das Level starte, dann stimmt die Position der Grafik mit dem festgesetzten Wert von 100 nicht überein. Ich möchte nämlich, dass sich die Grafik bei Lebensverlust nach links verschiebt, sprich, dass die rechte Seite des Balkens dann durchsichtig (schwarz = OVERLAY) wird. Hat vielleicht jemand einen Rat für mich? Auf was muss ich bei den Pixelangaben im Window und beim erstellen der Grafik dann achten? Irgendwie komme ich mit den Pixelangaben bzw mit den Größenverhltnissen nicht klar. Ich probiere nun schon ein paar Stunden, aber ich komme nicht zu dem Ergebnis, das ich gerne hätte. Durch das lite-c Tutorial wurde ich leider auch nicht schlauer. Würde ich freuen, wenn mir jemand helfen kann! Danke, lg strudi
|
|
|
Re: Panel + Window = Lebensbalken?! [GER]
[Re: strudi1986]
#322826
05/10/10 01:23
05/10/10 01:23
|
Joined: Jan 2002
Posts: 4,225 Germany / Essen
Uhrwerk
Expert
|
Expert
Joined: Jan 2002
Posts: 4,225
Germany / Essen
|
Hallo Strudi,
willkommen im Gamestudio Forum. Deine Überlegungen sind doch alle gut und richtig. Wenn Du die Variable auf 100 setzt, dann sollte die Position deines Schwarz/Rot Balkens genau in der Mitte sein. Bei 200 sollte er komplett schwarz sein und bei 0 sollte alles rot sein. Die Variable, die Du in der Window-Definition angibst, definiert quasi die Pixelposition, bei der zu zeichnen angefangen wird. Sprich: wenn Deine Variable 100 ist, dann werden ab dem 100. Pixel alle folgenden 200 Pixel (also bis 300) auch auf den Bildschirm gemalt.
Wenn Du von Gesundheit (0-100) auf die Pixelposition schliessen willst, dann kannst Du das wie folgt umrechnen:
Position = 200 - (Gesundheit * 2);
Wenns noch nicht klappt, dann nicht verzweifeln. Poste doch einfach mal den Code, den Du geschrieben hast.
Always learn from history, to be sure you make the same mistakes again...
|
|
|
Re: Panel + Window = Lebensbalken?! [GER]
[Re: Uhrwerk]
#322827
05/10/10 01:48
05/10/10 01:48
|
Joined: May 2010
Posts: 9
strudi1986
OP
Newbie
|
OP
Newbie
Joined: May 2010
Posts: 9
|
Hi, ich bedanke mich recht herzlich. Jetzt versteh ich wie es funktioniert und es funktioniert auch! Es war anscheinend die ganze Zeit richtig, nur die Werte haben mich irritiert. Ich bin nämlich die ganze Zeit davon ausgegangen, dass die Variable die ich fälschlicherweise als "player_health" definiert habe, auch das Leben der Spielfigur wiederspiegeln. Deshalb bin ich nicht auf einen Nenner mit der Balkenanzeige gekommen. Vielen Dank nochmals dafür. Die Umrechnung für die Leben, gehört dann aber ins Playerscript oder? Schreibe nämlich das Playerscript und die Paneldefinitionen in seperate Dateien. Danke nochmals, lg strudi
|
|
|
Re: Panel + Window = Lebensbalken?! [GER]
[Re: strudi1986]
#322882
05/10/10 13:14
05/10/10 13:14
|
Joined: Jan 2002
Posts: 4,225 Germany / Essen
Uhrwerk
Expert
|
Expert
Joined: Jan 2002
Posts: 4,225
Germany / Essen
|
Hallo Strudi,
das ist Geschmacksache. Ich würde eher argumentieren, dass die Umrechnung in die Datei mit der Panel Definition gehört, denn es geht hier ja um die Visualisierung eines Wertes. Spielt ja aber unterm Strich keine Rolle.
Gruß, Uhrwerk
Always learn from history, to be sure you make the same mistakes again...
|
|
|
Re: Panel + Window = Lebensbalken?! [GER]
[Re: Uhrwerk]
#322891
05/10/10 13:26
05/10/10 13:26
|
Joined: May 2010
Posts: 9
strudi1986
OP
Newbie
|
OP
Newbie
Joined: May 2010
Posts: 9
|
Hi! Habe versucht die Umrechnung einzubauen, aber es funktioniert nicht. Der Balken verschiebt sich nicht, wenn die Variable mit den Lebenspunkten geändert wird. Hier mal der Code wie ich es gemacht habe:
var player_health; //erhält den Wert im Playerscript, definierter Skill
var player_mana; //erhält den Wert im Playerscript, definierter Skill
var health_pos = 200 - (player_health*2);
var mana_pos = 200 - (player_mana*2);
PANEL* char_balken_pan =
{
bmap = "charbalken.pcx";
pos_x = 0;
pos_y = 0;
window = 111, 31, 200, 20, "playerhealth.pcx", health_pos, 0);
window = 111, 54, 200, 20, "playermana.pcx", mana_pos, 0);
digits(200, 37, 3, *, 1, player_health);
digits(200, 60, 3, *, 1, player_mana);
flags = SHOW | OVERLAY;
}
Die Wertübergabe vom Skill aus dem Playerscript an die Variable "player_health" bzw "player_mana" funktioniert einwandfrei. Jedoch verschiebt sich der Balken "health_pos" nicht wenn sich der Wert verändert. Vielen Dank für die Hilfe! lg strudi
|
|
|
Re: Panel + Window = Lebensbalken?! [GER]
[Re: strudi1986]
#322895
05/10/10 13:29
05/10/10 13:29
|
Joined: Jan 2002
Posts: 4,225 Germany / Essen
Uhrwerk
Expert
|
Expert
Joined: Jan 2002
Posts: 4,225
Germany / Essen
|
Du musst den Wert für healthpos natürlich jedes Frame neu berechnen. Zum Beispiel:
var player_health; //erhält den Wert im Playerscript, definierter Skill
var player_mana; //erhält den Wert im Playerscript, definierter Skill
var health_pos = 200 - (player_health*2);
var mana_pos = 200 - (player_mana*2);
PANEL* char_balken_pan =
{
bmap = "charbalken.pcx";
pos_x = 0;
pos_y = 0;
window = 111, 31, 200, 20, "playerhealth.pcx", health_pos, 0);
window = 111, 54, 200, 20, "playermana.pcx", mana_pos, 0);
digits(200, 37, 3, *, 1, player_health);
digits(200, 60, 3, *, 1, player_mana);
flags = SHOW | OVERLAY;
}
void char_balken_startup()
{
while(1)
{
health_pos = 200 - (player_health*2);
wait(1);
}
}
Always learn from history, to be sure you make the same mistakes again...
|
|
|
Re: Panel + Window = Lebensbalken?! [GER]
[Re: Uhrwerk]
#322896
05/10/10 13:37
05/10/10 13:37
|
Joined: May 2010
Posts: 9
strudi1986
OP
Newbie
|
OP
Newbie
Joined: May 2010
Posts: 9
|
Super, funktioniert. Teilweise komm ich einfach nicht auf die Lösung des Problems, obwohl es doch so einfach wär. Vielen Dank für die Hilfe. lg strudi
|
|
|
Re: Panel + Window = Lebensbalken?! [GER]
[Re: strudi1986]
#322946
05/10/10 17:12
05/10/10 17:12
|
Joined: May 2010
Posts: 9
strudi1986
OP
Newbie
|
OP
Newbie
Joined: May 2010
Posts: 9
|
Eine letzte Frage habe ich noch. Wenn meine Lebenspunkte steigen, sei es in Form von einem LevelUp oder per neuer Ausrüstung, dann funktioniert diese Umrechnung für den Lebensbalken nicht mehr. Gibt es dafür eine einheitliche Lösung? Oder ist das etwas komplizierter? Ich dachte mir, dass die Variable "player_health" die den Wert 100 bekommt, zustätzlich irgendwie in einer anderen Variable gespeichert werden muss und dort irgendwie in 100% umgewandelt werden muss. Und Wenn die Variable "player_health" zB den Wert 200 erhält, diese wiederum auch 100% ergeben. Liege ich mit dieser Annahme richtig, oder bin ich total auf dem Holzweg? lg strudi
|
|
|
Re: Panel + Window = Lebensbalken?! [GER]
[Re: strudi1986]
#322959
05/10/10 17:44
05/10/10 17:44
|
Joined: Feb 2009
Posts: 3,207 Germany, Magdeburg
Rei_Ayanami
Expert
|
Expert
Joined: Feb 2009
Posts: 3,207
Germany, Magdeburg
|
Nutze für die Berechnung der Panel Position keine Startup function. Diese erhöhen die Startup-Zeit und sind nur für Funktionen gedacht die im ersten Frame laufen müssen. Streiche das _startup und starte die function vom player script aus
|
|
|
Moderated by mk_1, Perro, rayp, Realspawn, Rei_Ayanami, rvL_eXile, Spirit, Superku, Tobias, TSG_Torsten, VeT
|