🇺🇦 Українська (Ukrainian - Ukraine)
🇺🇦 Українська (Ukrainian - Ukraine)
Зовнішній вигляд
🇺🇦 Українська (Ukrainian - Ukraine)
🇺🇦 Українська (Ukrainian - Ukraine)
Зовнішній вигляд
Ця сторінка написана для версії:
1.21.4
Ця сторінка написана для версії:
1.21.4
Ми вже коротко торкалися промальовування речей у hud на сторінці основних концепцій промальовування і використання контексту малювання, тому на цій сторінці ми дотримуватимемося події HudRenderCallback
і параметра tickDelta
.
Подія HudRenderCallback
, надана API Fabric, викликається в кожному кадрі та використовується для промальовування речей у HUD.
Щоб зареєструватися на цю подію, ви можете просто викликати HudRenderCallback.EVENT.register
і передати лямбда-вираз, який приймає екземпляри DrawContext
і RenderTickCounter
як параметри.
Контекст малювання можна використовувати для доступу до різноманітних утиліт промальовування, які надає гра, і доступу до стеку необроблених матриць.
Перегляньте сторінку контекст малювання, щоб дізнатися більше про контекст малювання.
Клас RenderTickCounter
дозволяє отримати поточне значення tickDelta
.
tickDelta
— це «прогрес» між останнім ігровим тактом і наступним.
Наприклад, якщо ми припустимо сценарій 200 FPS, гра запускає новий такт приблизно кожні 10 кадрів. Кожен кадр, tickDelta
, представляє, наскільки ми знаходимося між останнім тактом і наступним. Понад 10 кадрів ви можете побачити:
Кадр | tickDelta |
---|---|
1 | 1.0 (новий такт) |
2 | 0.11 (1÷9) - Наступний такт в 9 кадрі. |
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) (новий такт) |
На практиці ви повинні використовувати tickDelta
лише тоді, коли ваша анімація залежить від тактів Minecraft. Для анімації на основі часу використовуйте Util.getMeasuringTimeMs()
, який вимірює реальний час.
Ви можете отримати tickDelta
за допомогою функції renderTickCounter.getTickDelta(false);
, де логічним параметром є ignoreFreeze
, що, по суті, дозволяє вам просто ігнорувати, коли гравці використовують команду /tick freeze
.
У цьому прикладі ми використаємо Util.getMeasuringTimeMs()
для лінійної інтерполяції кольору квадрата, який промальовується на HUD.
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);
});
Чому б вам не спробувати використати tickDelta
і подивитися, що відбувається з анімацією, коли ви виконуєте команду /tick freeze
? Ви повинні побачити зависання анімації, коли tickDelta
стане постійним (припустимо, що ви передали false
як параметр для RenderTickCounter#getTickDelta
)