From 316fe19c4dee2f15fd2c9671157e6321b5efabf0 Mon Sep 17 00:00:00 2001 From: 17146 <1714673995@qq.com> Date: Sat, 21 Jun 2025 19:24:15 +0800 Subject: [PATCH] =?UTF-8?q?=E5=B0=9D=E8=AF=95=E8=B0=83=E6=95=B4=E8=BD=BD?= =?UTF-8?q?=E5=85=B7=E5=8A=A8=E9=87=8F=E6=9C=BA=E5=88=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../entity/vehicle/base/VehicleEntity.java | 25 +++++++++++++++++-- 1 file changed, 23 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/atsuishio/superbwarfare/entity/vehicle/base/VehicleEntity.java b/src/main/java/com/atsuishio/superbwarfare/entity/vehicle/base/VehicleEntity.java index de1d5f536..67d9a04e0 100644 --- a/src/main/java/com/atsuishio/superbwarfare/entity/vehicle/base/VehicleEntity.java +++ b/src/main/java/com/atsuishio/superbwarfare/entity/vehicle/base/VehicleEntity.java @@ -1141,13 +1141,34 @@ public abstract class VehicleEntity extends Entity { @Override public void setDeltaMovement(Vec3 pDeltaMovement) { - if (pDeltaMovement.length() > 8) return; + Vec3 currentMomentum = this.getDeltaMovement(); + + // 计算当前速度和新速度的标量大小 + double currentSpeedSq = currentMomentum.lengthSqr(); + double newSpeedSq = pDeltaMovement.lengthSqr(); + + // 只在新速度大于当前速度时(加速过程)进行检查 + if (newSpeedSq > currentSpeedSq) { + // 计算加速度向量 + Vec3 acceleration = pDeltaMovement.subtract(currentMomentum); + + // 检查加速度大小是否超过阈值 + if (acceleration.lengthSqr() > 8) { + // 限制加速度不超过阈值 + Vec3 limitedAcceleration = acceleration.normalize().scale(0.125); + Vec3 finalMomentum = currentMomentum.add(limitedAcceleration); + + super.setDeltaMovement(finalMomentum); + return; + } + } + // 对于减速或允许的加速,直接设置新动量 super.setDeltaMovement(pDeltaMovement); } @Override public void addDeltaMovement(Vec3 pAddend) { - if (pAddend.length() > 0.1) return; + if (pAddend.length() > 0.1) pAddend = pAddend.scale(0); super.addDeltaMovement(pAddend); }