Scripte:Lebensbalken
Aus Clonk Wiki
Inhaltsverzeichnis |
Allgemein
Hier wird gezeigt, wie man sich einen eigenen Lebensbalken machen könnte. Dazu benötigen wir zuerst eine Graphik. Ich habe dazu einen roten Balken (100px x 10px) verwendet.
| Lebensbalken | |
|---|---|
| Kategorie: | Objekt |
| Autor: | Feuermonster |
| Behandelt: | {{{Behandelt}}} |
| Empfohlenes Vorwissen: | {{{Vorwissen}}} |
| Benötigt Objektpacks: | {{{Packs}}} |
| Stufe: | |
Voraussetzungen
Für den Lebensbalken benötigen wir ein Objekt mit richtig gesetzten Vertices sowie eine ActMap mit einer Aktion mit der Procedure "ATTACH".
In meinem Fall sieht DefCore wie folgt aus:
Width=100 Height=10 Offset=-50,-5 Vertices=1 VertexY=20 Timer=10 TimerCall=UpdateEnergy
Width und Height bestimmen Höhe und Breite. Offset ist der Mittelpunkt. Er wird relativ zum Nullpunkt (oben in der linken Ecke) angegeben. In unseren Fall ist er 50 Pixel vom linken Rand und 5 Pixel vom oberen Rand entfernt. Der Timer sorft dafür, dass die Funktion "UpdateEnergy" alle 10 Frames aufgerufen wird. Man könnte hier natürlich auch Effekte verwenden. Mit dem Fx*Damage-Callback müsste man damit nicht periodisch updaten, sondern effektiv nur dann, wenn der Clonk schaden erleidet.
Die ActMap sieht wie folgt aus:
[Action] Name=Attach Procedure=ATTACH Facet=0,0,100,10
Facet ist hier auf 0,0 (Startpunkt) und 100,10 (Breite,Höhe) gesetzt. Diese Angaben sind wichtig, sonst wird keine Graphik angezeigt.
Code
/*-- Lebensbalken --*/
#strict
local
pClonk;
protected
func
Initialize()
{
return(true);
}
public
func
SetClonk(object
pClnk)
{
if(!pClnk)
return(true);
//Diesen Clonk gibt es nicht, abbrechen.
if(!GetAlive(pClnk))
return(true);
//Dieser Clonk lebt nicht, abbrechen
SetAction("Attach",pClnk);
//Nun setzen wir die Aktion Attach.
pClonk
=
pClnk;
//den Clonk speichern
return(true);
}
public
func
UpdateEnergy()
{
if(!pClonk)
RemoveObject();
//Objekt ist nicht mehr da, dann weg mit uns
if(!GetAlive(pClonk))
RemoveObject();
//Clonk lebt nicht mehr, auch weg mit uns
var
iMaxEnergy
=
GetPhysical("Energy",0,pClonk)
/
1000;
//Die maximale Energy des Clonkes
var
iEnergy
=
GetEnergy(pClonk);
//die aktuelle Energy
var
iPercent
=
(iEnergy
*
100
/
iMaxEnergy)*10;
//den Prozentwert ausrechnen.
SetObjDrawTransform(iPercent,0,0,0,1000,0,this());
//Graphik verkleinern.
}
Erklärung
SetAction("Attach",pClnk);
Damit setzen wir die Aktion des Objektes. In der ActMap haben wir sie Attach gennant. Wichtig ist jedoch die Procedure im Objekt. Die Proceduze "ATTACH" sorgt dafuer, dass ein Objekt einem anderen Objekt "folgt". Hier kommen die Vertices ins Spiel. Attach orientiert sich an den Vertices. In der DefCore haben wir "VertexY=20" gesetzt, damit erscheint unser Lebensbalken 20px ueber dem Offset (Mitte) des Clonkes.
var
iMaxEnergy
=
GetPhysical("Energy",0,pClonk)
/
1000;Schlauen Leuten wird aufgefallen sein, dass in der Physical-Section des Clonkes die Werte viel höher sind, als man mit GetEnergy() erhalten würde. Die Physicals sind immer mit dem Faktor 1000 multipliziert gespeichert. 1000 Energy entspricht 1. Damit wir also einen Wert haben, der zu GetEnergy() stimmt, müssen wir durch 1000 dividieren.
var
iPercent
=
(iEnergy
*
100
/
iMaxEnergy)*10;Clonk kann nicht von sich aus mit Kommazahlen rechnen. Deshalb multiplizieren wir den Energywert des Clonkes mit 100. Wenn iEnergy genau so gross ist, wie iMaxEnergy ergibt dies 100. 100 wie 100%. Das * 10 folgt im nächsten Abschnitt.
SetObjDrawTransform(iPercent,0,0,0,1000,0,this());
Mit dieser Funktion kann man Graphiken transformieren (verzerren/strecken/rotieren). Die Parameter für diese Funktion sind:
SetObjDrawTransform (int iWidth, int iXSkew, int iXAdjust, int iYSkew, int iHeight, int iYAdjust, object pObj, int iOverlayID);
Ich behandele jedoch nur iWidth und iHeight. Sind diese auf 1000, wird die Graphik nicht verzerrt. (Sofern keine anderen Parameter gesetzt sind). Das erklärt, warum wir oben noch * 10 rechnen. Wenn wir iWidth auf 500 setzen, ist die Graphik nur noch halb so lang. Analog ist dies zu iHeight.
Weiteres
Beispieldatei
| Scripte des Scripte-Projekts | |
| Bonbon · Context-Eintrag · EliminateTeam · Flint:Partikelschleuder · Hüpfbonbon · TeamMessage | |
| Flint:HitCounter · Flint:Partikelkreis · Flint:Partikelschleuder2 · Is-Funktionen · Menü:Beim Start der Runde · Normaler Flint · Partikel-Linie in den Himmel · Rakete · Random · Relaunch · Return · Sichtweite · Spawn · Startposition | |
| Clantag · Gift-Effekt · Unverwundbarkeit · Scoreboard · Zufallsgespräch | |
| Lebensbalken · Nachrichten bei Sichtkontakt · Object2Overlay · SHA1 | |
| Dieser Artikel wurde gemäß der Scriptrichtlinien veröffentlicht. |
