Lebenspunkte

Tuesday, October 29, 2013

Lebenspunkte

In diesem Post werde ich euch erklären und zeigen, wie mein Lebenspunktesystem funktioniert.


Grob gesagt gibt es zwei Variablen welche die Lebenspunkte organisieren, jedoch den gleichen Wert besitzen. Ihr fragt euch jetzt bestimmt: Wieso zwei Variablen mit dem gleichen Wert? Da reicht doch eine?! Das stimmt nicht ganz, das dachte ich am Anfang nämlich auch. Hier meine Erläuterung:

1. public static float healthPointsEnemy;
2. public static float healthPointsEnemyLocal;

Wie die Variablennamen schon sagen speichert die eine die Lebenspunkte des Gegners, die andere hat den gleichen Wert, wird aber für das lokale Anzeigen der gegnerischen Lebenspunkte benötigt.

Wird nun Client Nr.1 von Client Nr.2 geschlagen, so wird bei Client Nr.1 die Variable healthPointsEnemyLocal verringert. Durch einen RPC (Remote Procedure Call - hiermit kann man Funktionen auslösen, welche z.B. nicht beim eigenen Client passieren - mehr dazu hier) wird beim Gegner die Variable healthPointsEnemy verringert.

Um das ganze nun schön anzuzeigen werden die weißen Balken, welche ihr im Bild unten seht, entsprechend der Lebenspunkte gestreckt oder gestaucht.

Erster Healthbar Entwurf
Die Breite eines Balkens in meinem Spiel beträgt: healthPointsEnemyLocal.
Der Wert der Variable healthPointsEnemyLocal beträgt Screen.width/3*0.95f.
So wird gewährleistet, dass bei jeder Bildschirmgröße das Verhältnis der Lebenspunkte gleich bleibt.

Nun wäre es noch wichtig zu wissen welcher Balken zu welchem Spieler gehört. Denn der erste Spieler der sich zum Server verbindet startet auf der linken Seite, der zweite auf der Rechten. Dann sollten die Lebenspunkte des ersten Spielers logischerweise nicht auf der rechten Seite angezeigt werden.

Hierfür erhält eine Variable enemyIn beim Start den Wert false.

enemyIn = false;

Sobald diese Variable den Wert erhalten hat, wird die Abfrage

if(enemyIn==false){};

ausgelöst und bewirkt das Auslösen eines RPC für die Funktion SyncEnemyVar.

networkView.RPC("SyncEnemyVar", uLink.RPCMode.Others, "enemyIn");

Die SyncEnemyVar-Funktion verändert wiederum den Wert der Variable check von false auf true.

check = true;

Sobald check true ist, wird wieder eine Funktion durch einen RPC ausgelöst,

if(check==true)
{
   networkView.RPC("SyncEnemyVar2",uLink.RPCMode.Others,"enemyIn");
}

welche bewirkt, dass enemyIn true wird und einen weiteren RPC mit der Funktion "setCheckFalse" auslöst.

enemyIn = true;
networkView.RPC("setCheckFalse",uLink.RPCMode.All,"enemyIn");

Was diese tut verrät schon der Name.

Somit ist beim zweiten Spieler die Variable enemyIn true und wir können ihre Werte für das zuteilen der Balken nutzen.
Wenn die Variable enemyIn true ist, hat sich der Gegner zuerst mit dem Server verbunden und der eigene Character steht links. Somit ist mein Balken mit der Größe healthPointsEnemy auf der rechten Seite und der Balken mit der Größe healthPointsEnemyLocal auf der linken Seite.

Vermutlich hat das den ein oder anderen von euch etwas verwirrt :) jedoch ist dies eine von vielen Möglichkeit ein Lebenspunktesystem zu bauen und bei genauerem Hinschauen recht einfach nachzuvollziehen!

No comments:

Post a Comment