From 95bd4e4ebb8d6786cc6ccfedce7e310a9ffbecc3 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: Thu, 30 Apr 2026 06:39:56 +0800 Subject: [PATCH] =?UTF-8?q?feat(BulletBase):=20=E6=B7=BB=E5=8A=A0=E5=AD=90?= =?UTF-8?q?=E5=BC=B9=E8=BF=90=E5=8A=A8=E7=B1=BB=E5=9E=8B=E6=9E=9A=E4=B8=BE?= =?UTF-8?q?=E5=B9=B6=E4=BF=AE=E6=94=B9=E5=BC=B9=E5=8F=8D=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 为子弹基类添加运动类型枚举(MotionType),包含四种运动方式。修改Parrier子弹的弹反逻辑,根据子弹运动类型执行不同处理: - 投射物:保持原有弹反或格挡逻辑 - 挥砍:禁用碰撞箱 - 魔法或召唤:为发射者存储能量 --- scripts/Contents/Bullets/Parrier.gd | 27 ++++++++++++++++----------- scripts/Statemachine/BulletBase.gd | 8 ++++++++ 2 files changed, 24 insertions(+), 11 deletions(-) diff --git a/scripts/Contents/Bullets/Parrier.gd b/scripts/Contents/Bullets/Parrier.gd index 33ae0b6..11f4920 100644 --- a/scripts/Contents/Bullets/Parrier.gd +++ b/scripts/Contents/Bullets/Parrier.gd @@ -40,17 +40,22 @@ func hitBullet(bullet: BulletBase): # 当前子弹与其他子弹相撞 eff.shot() launcher.impluse((position - bullet.position).normalized() * bullet.speed ** (1.0 / 2) * 250) var targetBaseDamage = bullet.baseDamage - # 弹反 还是 格挡? - if MathTool.rate(reflectRate): - bullet.look_at(bullet.launcher.getTrackingAnchor()) - bullet.launcher = launcher - bullet.baseDamage *= atk - bullet.baseDamage *= reflectRate - bullet.lifeTime *= 2 - if bullet.freeAfterSpawn && bullet.autoSpawnAnimation: - bullet.animator.speed_scale *= 0.5 - else: - bullet.tryDestroy() + if bullet.motionType == BulletBase.MotionType.PROJECTILE: + # 弹反 还是 格挡? + if MathTool.rate(reflectRate): + bullet.look_at(bullet.launcher.getTrackingAnchor()) + bullet.launcher = launcher + bullet.baseDamage *= atk + bullet.baseDamage *= reflectRate + bullet.lifeTime *= 2 + if bullet.freeAfterSpawn && bullet.autoSpawnAnimation: + bullet.animator.speed_scale *= 0.5 + else: + bullet.tryDestroy() + elif bullet.motionType == BulletBase.MotionType.SWING: + bullet.hitbox.disabled = true + elif bullet.motionType == BulletBase.MotionType.SUMMON || bullet.motionType == BulletBase.MotionType.MAGIC: + launcher.storeEnergy(sqrt(bullet.baseDamage)) var cycler = launcher.getOrCreateCycleTimer("parry", 2000, 100) if len(cycler.bullets) < maxBallCount: # 玩家最多只能拥有多少气 for b in BulletBase.generate( diff --git a/scripts/Statemachine/BulletBase.gd b/scripts/Statemachine/BulletBase.gd index 3c94303..e85cbfc 100644 --- a/scripts/Statemachine/BulletBase.gd +++ b/scripts/Statemachine/BulletBase.gd @@ -1,9 +1,17 @@ extends Area2D class_name BulletBase +enum MotionType { + SWING, + PROJECTILE, + MAGIC, + SUMMON +} + @export var displayName: String = "未知子弹" @export var speed: float = 10.0 @export var baseDamage: float = 10.0 +@export var motionType: MotionType = MotionType.PROJECTILE @export var damageMultipliers: Array[float] = [1.0] @export var usingDamageMultiplier: int = 0 @export var penerate: float = 0.0