Промальовування у HUD
Ми вже коротко торкалися рендера речей у HUD на сторінці основних концепцій рендера і використання малювання в GUI, тому на цій сторінці ми будемо дотримуватись API Hud і параметра DeltaTracker.
HudElementRegistry
Fabric надає API Hud для рендера та накладення елементів на HUD.
Для початку нам потрібно зареєструвати слухача HudLayerRegistrationCallback, який реєструє ваші елементи. Кожен елемент є HudElement. Екземпляр HudElement — це зазвичай лямбда, яка приймає екземпляри GuiGraphicsExtractor і DeltaTracker як параметри. Перегляньте HudElementRegistry та пов’язані Javadocs, щоб дізнатися більше про те, як використовувати API.
Графіку GUI можна використовувати для доступу до різноманітних утиліт рендера, які надає гра, і доступу до стека необроблених матриць. Щоб дізнатися більше про них, перегляньте сторінку малювання в GUI.
Дельта-трекер
Клас DeltaTracker дозволяє отримати поточне значення gameTimeDeltaPartialTick. gameTimeDeltaPartialTick — це «прогрес» між останнім і наступним ігровими тактами.
Наприклад, якщо ми припустимо сценарій 200 к/с, гра запускає новий такт приблизно кожні 10 кадрів. Кожен кадр, gameTimeDeltaPartialTick, представляє, наскільки ми знаходимося між останнім і наступним тактами. Понад 11 кадрів ви можете побачити:
| Кадр | gameTimeDeltaPartialTick |
|---|---|
1 | 1: Новий такт |
2 | 1/10 = 0.1 |
3 | 2/10 = 0.2 |
4 | 3/10 = 0.3 |
5 | 4/10 = 0.4 |
6 | 5/10 = 0.5 |
7 | 6/10 = 0.6 |
8 | 7/10 = 0.7 |
9 | 8/10 = 0.8 |
10 | 9/10 = 0.9 |
11 | 1: Новий такт |
Ви можете отримати gameTimeDeltaPartialTick, викликавши deltaTracker.getGameTimeDeltaPartialTick(false), де логічним параметром є ignoreFreeze, що, по суті, дозволяє просто ігнорувати, коли гравці використовують команду /tick freeze.
На практиці ви повинні використовувати gameTimeDeltaPartialTick лише тоді, коли ваші анімації залежать від тактів Minecraft. Для анімації на основі часу використовуйте Util.getMillis(), який вимірює реальний час.
У цьому прикладі ми використаємо Util.getMillis() для лінійної інтерполяції кольору квадрата, який рендериться на HUD.
java
No lines matched.1

Чому б вам не спробувати використати gameTimeDeltaPartialTick і подивитися, що відбувається з анімацією, коли ви виконуєте команду /tick freeze? Ви повинні побачити зависання анімації, коли gameTimeDeltaPartialTick стане постійним, припустимо, що ви передали false як параметр для DeltaTracker#getGameTimeDeltaPartialTick


