Im Gegensatz zu GameObject
-Instanzen werden HUD-Objekte in 2D platziert, so dass sie sich an den tatsächlichen Pixelkoordinaten des Monitors orientieren.
HUD-Objekte können Instanzen der folgenden Klassen sein:
HUDObjectImage
oderHUDObjectText
Sie werden idealerweise in den Prepare()
-Methoden Ihrer World
-Klassen hinzugefügt.
Beispiel 1: Text platzieren
public class GameWorld : World { public override void Act() { HUDObjectText h = GetHUDObjectTextByName("MyHUDObject"); // Wenn ein Objekt dieses Typs und dieses Namens gefunden werden // konnte, ist die Variable h nicht 'leer', also 'nicht null': if(h != null) { if(h.IsMouseCursorOnMe() == true) { h.SetColorEmissiveIntensity(1.5f); } else { h.SetColorEmissiveIntensity(0.0f); } } } public override void Prepare() { // Platziere ein textbasiertes HUD-Objekt: HUDObjectText h = new HUDObjectText("Hello World!"); h.SetPosition(64, 32); // 64 Pixel von links und // 32 Pixel von oben auf dem Bildschirm h.Name = "MyHUDObject"; // Interner Name des Objekts, damit es später // von anderen Objekten gefunden werden kann h.SetCharacterDistanceFactor(1.0f); // Abstandsmultiplikator (der Buchstaben zueinander) h.SetColor(1.0f, 0.0f, 0.0f); // Reguläre Färbung (hier: rot) h.SetColorEmissive(1.0f, 1.0f, 1.0f); // Glühfarbe (RGB), die Intensität wird separat geregelt AddHUDObject(h); } }
Im obigen Beispiel wird ein HUDObjectText
in der Variable h
angelegt und mit einem anzuzeigenden Text belegt.
Anschließend wird es der aktuellen World
hinzugefügt.
In der Act()
-Methode wird dann mittels GetHUDObjectTextByName()
nach einem HUDObjectText
-Objekt dieses Namens gesucht und geprüft, ob sich der Mauszeiger gerade über dem Objekt befindet. Wenn ja, fängt das Objekt an zu glühen.
Beispiel 2: Ein Bild platzieren
public class GameWorld : World { public override void Act() { HUDObjectImage h = GetHUDObjectImageByName("MyHUDObject"); if(h != null) { if(h.IsMouseCursorOnMe() == true) { h.SetColorEmissiveIntensity(1.5f); } else { h.SetColorEmissiveIntensity(0.0f); } } } public override void Prepare() { // Platziere ein bildbasiertes HUD-Objekt: HUDObject h = new HUDObjectImage("./textureFolder/myTexture.jpg"); h.SetPosition(64f, 64f); // Position in Pixeln (von links oben des Bildschirms aus gesehen) h.Name = "MyHUDObject"; // Interner Name des Objekts h.SetScale(128f, 128f); // Skalierung des Bildes h.SetColorEmissive(1.0f, 1.0f, 1.0f); // Glühfarbe (RGB), die Intensität wird separat geregelt AddHUDObject(h); } }
Das Verfahren ist ähnlich zum Typ HUDObjectText
, nur dass hier die Klasse HUDObjectImage
verwendet wird.
Achtung:
Wenn ein neues Bild (z.B. eine JPG-Datei) dem Projekt hinzugefügt wird, muss man in den Dateieigenschaften (Rechtsklick auf die Datei im Projektmappen-Explorer gefolgt von der Auswahl des Menüpunkts „Eigenschaften“) einstellen, dass die Datei in das Ausgabeverzeichnis kopiert wird (Wert: „kopieren, wenn neuer“). Andernfalls wird die Bilddatei nicht von der Engine gefunden.
Wie finden andere Klassen (z.B. Enemy
) ein HUDObject
, um es anzupassen?
public class Player : GameObject { public override void Act() { HUDObjectText h = CurrentWorld.GetHUDObjectTextByName("the name you're looking for.."); if(h != null) { // Hier können h jetzt Befehle erteilt werden... } } }
Schreibe einen Kommentar