🇩🇪 Deutsch (German)
🇩🇪 Deutsch (German)
Erscheinungsbild
🇩🇪 Deutsch (German)
🇩🇪 Deutsch (German)
Erscheinungsbild
Diese Seite ist für folgende Version geschrieben:
1.21.4
Diese Seite ist für folgende Version geschrieben:
1.21.4
Wir haben bereits auf der Seite Grundlegende Rendering-Konzepte und Den Zeichenkontext verwenden kurz über das Rendern von Dingen auf dem Hud gesprochen, daher beschränken wir uns auf dieser Seite auf das Event HudRenderCallback
und den Parameter tickDelta
.
Das Event HudRenderCallback
, das von der Fabric API bereitgestellt wird, wird bei jedem Frame aufgerufen und wird zum Rendern von Dingen auf dem HUD verwendet.
Um dieses Event zu registrieren, kannst du einfach HudRenderCallback.EVENT.register
aufrufen und ein Lambda übergeben, welches einen DrawContext
und eine RenderTickCounter
Instanz als Parameter entegennimmt.
Der Zeichenkontext kann verwendet werden, um auf die verschiedenen Rendering-Utilities zuzugreifen, die vom Spiel zur Verfügung gestellt werden, und um auf den Rohmatrix-Stapel zuzugreifen.
Du solltest dir die Seite Den Zeichenkontext verwenden ansehen, um mehr über den Zeichenkontext zu erfahren.
Die RenderTickCounter
Klasse erlaubt es dir, den aktuellen tickDelta
Wert abzurufen.
tickDelta
ist der "Fortschritt" zwischen dem letzten Spieltick und dem nächsten Spieltick.
Wenn wir zum Beispiel von einem Szenario mit 200 FPS ausgehen, führt das Spiel ungefähr alle 10 Bilder einen neuen Tick aus. In jedem Frame gibt tickDelta
an, wie weit der letzte Tick vom nächsten entfernt ist. Bei mehr als 10 Bildern könntest du folgendes sehen:
Frame | tickDelta |
---|---|
1 | 1.0 (neuer Tick) |
2 | 0.11 (1÷9) - Der nächste Tick ist in 9 Frames. |
3 | 0.22 (2÷9) |
4 | 0.33 (3÷9) |
5 | 0.44 (4÷9) |
6 | 0.55 (5÷9) |
7 | 0.66 (6÷9) |
8 | 0.77 (7÷9) |
9 | 0.88 (8÷9) |
10 | 1.0 (9÷9) (neuer Tick) |
Praktischerweise solltest du tickDelta
nur verwenden, wenn deine Animationen von Minecrafts Ticks abhängen. Für zeitbasierte Animationen verwende Util.getMeasuringTimeMs()
, das die Zeit in der realen Welt misst.
Du kannst tickDelta
mit der Funktion renderTickCounter.getTickDelta(false);
abrufen, wobei der boolesche Parameter ignoreFreeze
ist, was dir im Wesentlichen erlaubt, zu ignorieren, wenn Spieler den Befehl /tick freeze
verwenden.
In diesem Beispiel werden wir Util.getMeasuringTimeMs()
verwenden, um die Farbe eines Quadrats, das auf dem HUD gerendert wird, linear zu interpolieren.
HudRenderCallback.EVENT.register((context, renderTickCounter) -> {
int color = 0xFFFF0000; // Red
int targetColor = 0xFF00FF00; // Green
// You can use the Util.getMeasuringTimeMs(); function to get the current time in seconds.
double currentTime = Util.getMeasuringTimeMs();
// "lerp" simply means "linear interpolation", which is a fancy way of saying "blend".
float lerpedAmount = MathHelper.abs(MathHelper.sin((float) (currentTime / 50.0f)));
int lerpedColor = ColorHelper.lerp(lerpedAmount, color, targetColor);
// Draw a square with the lerped color.
// x1, x2, y1, y2, z, color
context.fill(0, 0, 100, 100, 0, lerpedColor);
});
Wieso versuchst du nicht, tickDelta
zu verwenden und zu sehen, was mit der Animation passiert, wenn du den Befehl /tick freeze
ausführst? Du solltest sehen, wie die Animation an Ort und Stelle einfriert, wenn tickDelta
konstant wird (vorausgesetzt, du hast false
als Parameter an RenderTickCounter#getTickDelta
übergeben)