From ce7765c027e9c6d6c0196377c4a0c49aee1765be Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=99=A8=E8=90=BD=E5=9F=BA=E5=9B=B4=E8=99=BE?= <3161880837@qq.com> Date: Sat, 28 Mar 2026 09:04:38 +0800 Subject: [PATCH] =?UTF-8?q?refactor(=E6=88=98=E6=96=97=E7=B3=BB=E7=BB=9F):?= =?UTF-8?q?=20=E4=BC=98=E5=8C=96=E6=94=BB=E5=87=BB=E9=80=BB=E8=BE=91?= =?UTF-8?q?=E5=92=8C=E7=A2=B0=E6=92=9E=E5=A4=84=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 将蓄力攻击逻辑提取为独立方法 chargeUp 以提高代码复用性 - 调整攻击动画的等待时间,增加蓄力效果 - 添加碰撞反弹处理并重置冲刺状态 - 优化冲刺逻辑,在不可冲刺时提前终止 --- scripts/Contents/Characters/Kernyr.gd | 6 ++++-- scripts/Statemachine/EntityBase.gd | 15 +++++++++++---- 2 files changed, 15 insertions(+), 6 deletions(-) diff --git a/scripts/Contents/Characters/Kernyr.gd b/scripts/Contents/Characters/Kernyr.gd index 70c1e22..7472326 100644 --- a/scripts/Contents/Characters/Kernyr.gd +++ b/scripts/Contents/Characters/Kernyr.gd @@ -39,7 +39,8 @@ func attack(type: int): var anchor = currentFocusedBoss.position var radius = 600 await sprintTo(anchor + Vector2(0, -radius), 0.1) - await TickTool.millseconds(2000) + await TickTool.millseconds(500) + await chargeUp() var count = 10.0 for i in count: await sprintTo(anchor + Vector2.from_angle(deg_to_rad(i / count * 360.0 - 90)) * radius, 0.5) @@ -51,4 +52,5 @@ func attack(type: int): ): if bullet is YangyiBullet: bullet.look_at(anchor) - await TickTool.millseconds(3000) + await TickTool.millseconds(2000) + await chargeUp() diff --git a/scripts/Statemachine/EntityBase.gd b/scripts/Statemachine/EntityBase.gd index 82cb9b7..0e04c5a 100644 --- a/scripts/Statemachine/EntityBase.gd +++ b/scripts/Statemachine/EntityBase.gd @@ -203,6 +203,11 @@ func _physics_process(_delta: float) -> void: velocity += inertia inertia *= 0.9 move_and_slide() + var collision = get_last_slide_collision() + if is_instance_valid(collision): + inertia = inertia.bounce(collision.get_normal()) + targetableSprinting = false + sprinting = false storeEnergy(randf_range(0.01, 0.05 + fields.get(FieldStore.Entity.ENERGY_REGENERATION) - 1), true) trailParticle.emitting = trailing for cycler in cycleTimers.values(): @@ -339,9 +344,7 @@ func tryAttack(type: int, needChargeUp: bool = false): state = cooldownTimer.start() if state: if needChargeUp: - charginup = true - await EffectController.create(ComponentManager.getEffect("AttackStar"), damageAnchor.global_position).shot() - charginup = false + await chargeUp() for attackingState in attackingStates: if attackingState in attackMutexes: return false @@ -356,6 +359,10 @@ func tryAttack(type: int, needChargeUp: bool = false): playSound("attack" + str(type)) attackingStates.erase(type) return state +func chargeUp(): + charginup = true + await EffectController.create(ComponentManager.getEffect("AttackStar"), damageAnchor.global_position).shot() + charginup = false func trySprint(): trailing = true playSound("sprint") @@ -370,7 +377,7 @@ func sprintTo(target: Vector2, speed: float): await TickTool.until( func(): position += (target - position) * speed - return position.distance_to(target) < 10 + return position.distance_to(target) < 10 || !targetableSprinting ) position = target trailing = false