Вопрос Как сделать отвод камеры при выключении/потери таргета

Начинающий
Начинающий
Статус
Оффлайн
Регистрация
19 Янв 2024
Сообщения
217
Реакции
0
у меня уже все готовое но - с камерой отвод норм - с головой не воркает
public boolean update() {
if (!this.isActive) {
return false;
}

long elapsed = System.currentTimeMillis() - startTime;

if (elapsed >= duration) {
if (mc.player != null) {
float yaw = targetYaw;
float pitch = clamp(targetPitch, -90f, 90f);

if (applyDirectly) {
mc.player.rotationYaw = yaw;
mc.player.rotationPitch = pitch;
} else {
mc.player.rotationYawHead = yaw;
mc.player.renderYawOffset = yaw;
}
}
this.isActive = false;
return false;
}

if (mc.player != null) {
float currentYaw = getCurrentYaw();
float currentPitch = getCurrentPitch();

if (applyDirectly) {
mc.player.rotationYaw = currentYaw;
mc.player.rotationPitch = currentPitch;
} else {
mc.player.rotationYawHead = currentYaw;
mc.player.rotationPitchHead = currentPitch;
}
}

return true;
}

уже все перепробовал хз че делать.
 
Привет! Проблема с отводом головы при потере таргета довольно распространённая при разработке килл-аур и связана с особенностями работы рендеринга и ротаций в Minecraft.

**Анализ твоего кода:**

В твоём коде есть несколько проблемных моментов:

1. **Отсутствие pitch для головы** - В блоке `else` ты устанавливаешь `rotationYawHead` и `renderYawOffset`, но не устанавливаешь `rotationPitchHead`. Pitch головы тоже нужно обновлять!

2. **Порядок применения ротаций** - `renderYawOffset` отвечает за поворот тела, а не головы. Для корректной работы нужно обновлять все три параметра: `rotationYawHead`, `rotationPitchHead` и `renderYawOffset`.

3. **Интерполяция** - Резкие изменения ротаций могут не отображаться корректно из-за клиентской интерполяции.

**Рабочее решение:**

```java
public boolean update() {
if (!this.isActive) {
return false;
}

long elapsed = System.currentTimeMillis() - startTime;

if (elapsed >= duration) {
if (mc.player != null) {
float yaw = targetYaw;
float pitch = clamp(targetPitch, -90f, 90f);

// Применяем финальные ротации
mc.player.rotationYaw = yaw;
mc.player.rotationPitch = pitch;
mc.player.rotationYawHead = yaw;
mc.player.rotationPitchHead = pitch;
mc.player.renderYawOffset = yaw;
mc.player.prevRotationYaw = yaw;
mc.player.prevRotationPitch = pitch;
mc.player.prevRotationYawHead = yaw;
mc.player.prevRotationPitchHead = pitch;
}
this.isActive = false;
return false;
}

if (mc.player != null) {
float currentYaw = getCurrentYaw();
float currentPitch = getCurrentPitch();

// Применяем промежуточные ротации
mc.player.rotationYaw = currentYaw;
mc.player.rotationPitch = currentPitch;
mc.player.rotationYawHead = currentYaw;
mc.player.rotationPitchHead = currentPitch; // ВОТ ЧЕГО У ТЕБЯ НЕ БЫЛО!
mc.player.renderYawOffset = currentYaw;
}

return true;
}
```

**Ключевые изменения:**

1. **Добавлен `rotationPitchHead`** - Это основное, что у тебя отсутствовало. Без этого голова не будет наклоняться вверх/вниз.

2. **Установка prev-значений** - `prevRotationYaw`, `prevRotationPitch` и т.д. помогают избежать рывков при рендеринге.

3. **Убрал условие `applyDirectly`** - Для корректной работы лучше всегда применять все ротации одновременно.

**Дополнительные советы:**

- Если отвод всё ещё дёргается, добавь сглаживание через линейную интерполяцию (lerp)
- Убедись, что метод `update()` вызывается в правильном Event (обычно это `EventUpdate` или `EventMotion`)
- Проверь, что `getCurrentYaw()` и `getCurrentPitch()` корректно вычисляют промежуточные значения

Попробуй это решение и отпишись, помогло ли!
 
Привет! Проблема с отводом головы при потере таргета довольно распространённая при разработке килл-аур и связана с особенностями работы рендеринга и ротаций в Minecraft.

**Анализ твоего кода:**

В твоём коде есть несколько проблемных моментов:

1. **Отсутствие pitch для головы** - В блоке `else` ты устанавливаешь `rotationYawHead` и `renderYawOffset`, но не устанавливаешь `rotationPitchHead`. Pitch головы тоже нужно обновлять!

2. **Порядок применения ротаций** - `renderYawOffset` отвечает за поворот тела, а не головы. Для корректной работы нужно обновлять все три параметра: `rotationYawHead`, `rotationPitchHead` и `renderYawOffset`.

3. **Интерполяция** - Резкие изменения ротаций могут не отображаться корректно из-за клиентской интерполяции.

**Рабочее решение:**

```java
public boolean update() {
if (!this.isActive) {
return false;
}

long elapsed = System.currentTimeMillis() - startTime;

if (elapsed >= duration) {
if (mc.player != null) {
float yaw = targetYaw;
float pitch = clamp(targetPitch, -90f, 90f);

// Применяем финальные ротации
mc.player.rotationYaw = yaw;
mc.player.rotationPitch = pitch;
mc.player.rotationYawHead = yaw;
mc.player.rotationPitchHead = pitch;
mc.player.renderYawOffset = yaw;
mc.player.prevRotationYaw = yaw;
mc.player.prevRotationPitch = pitch;
mc.player.prevRotationYawHead = yaw;
mc.player.prevRotationPitchHead = pitch;
}
this.isActive = false;
return false;
}

if (mc.player != null) {
float currentYaw = getCurrentYaw();
float currentPitch = getCurrentPitch();

// Применяем промежуточные ротации
mc.player.rotationYaw = currentYaw;
mc.player.rotationPitch = currentPitch;
mc.player.rotationYawHead = currentYaw;
mc.player.rotationPitchHead = currentPitch; // ВОТ ЧЕГО У ТЕБЯ НЕ БЫЛО!
mc.player.renderYawOffset = currentYaw;
}

return true;
}
```

**Ключевые изменения:**

1. **Добавлен `rotationPitchHead`** - Это основное, что у тебя отсутствовало. Без этого голова не будет наклоняться вверх/вниз.

2. **Установка prev-значений** - `prevRotationYaw`, `prevRotationPitch` и т.д. помогают избежать рывков при рендеринге.

3. **Убрал условие `applyDirectly`** - Для корректной работы лучше всегда применять все ротации одновременно.

**Дополнительные советы:**

- Если отвод всё ещё дёргается, добавь сглаживание через линейную интерполяцию (lerp)
- Убедись, что метод `update()` вызывается в правильном Event (обычно это `EventUpdate` или `EventMotion`)
- Проверь, что `getCurrentYaw()` и `getCurrentPitch()` корректно вычисляют промежуточные значения

Попробуй это решение и отпишись, помогло ли!
:da:
 
Назад
Сверху Снизу