这次以死神VS火影为例

使用pythonpygame为例

unity实现方案有些麻烦

# 角色基类
class Fighter:
    def __init__(self):
        self.x = 100
        self.y = 300
        self.hp = 100
        self.attack_cooldown = 0
        self.skills = [self.normal_attack, self.special_skill]

    def update(self):
        if self.attack_cooldown > 0:
            self.attack_cooldown -= 1

# 连招系统实现
class ComboSystem:
    def __init__(self):
        self.combo_sequence = []
        self.current_combo = 0

    def detect_combo(self, keys):
        if keys[pygame.K_j] and keys[pygame.K_k]:
            self.combo_sequence.append("J+K")
            return "X连击"

# 碰撞检测(AABB算法)
def check_collision(a, b):
    return (a.x < b.x + b.width and
            a.x + a.width > b.x and
            a.y < b.y + b.height and
            a.y + a.height > b.y)

# 技能释放逻辑
def use_skill(self, skill_index):
    if self.attack_cooldown == 0:
        skill = self.skills[skill_index]
        skill.execute()
        self.attack_cooldown = skill.cooldown

核心功能实现要点

1. 角色动作系统
  • 动画融合:使用Blender制作2D骨骼动画
  • 帧同步:通过pygame.time.Clock()控制动作节奏
  • 状态切换:空闲→攻击→收招状态转换
2. 技能系统设计

class Skill:
    def __init__(self, name, cooldown, damage):
        self.name = name
        self.cooldown = cooldown
        self.damage = damage
        self.current_cooldown = 0

    def can_use(self):
        return self.current_cooldown <= 0

    def use(self):
        self.current_cooldown = self.cooldown

到这里我们可以制作自己的技能逻辑了

连招判定逻辑

class ComboManager:
    def __init__(self):
        self.combo_sequence = []
        self.max_combo_length = 3

    def add_to_combo(self, input_key):
        if len(self.combo_sequence) < self.max_combo_length:
            self.combo_sequence.append(input_key)
            return self._check_combo()
        return None

    def _check_combo(self):
        # 检测特定连招组合
        if self.combo_sequence == ['J', 'J', 'K']:
            return "EX连击"
        return None

资源获取与工具链

1. 美术资源
类型 推荐资源 网址
角色精灵 Kenney角色包

Kenney平台

https://kenney.nl/assets/platformer

背景图 OpenGameArt免费素材

OpenGameArt

OpenGameArt.org |

音效 FreeSound音效库

FreeSound

Freesound

进阶技能逻辑:

增强型连招系统(含状态机)

class ComboState(Enum):
    IDLE = 1      # 空闲状态
    LIGHT_PUNCH = 2  # 轻攻击
    HEAVY_PUNCH = 3  # 重攻击
    SPECIAL_READY = 4  # 特殊技就绪
    COMBO_CHAIN = 5  # 连招链触发

class ComboSystem:
    def __init__(self):
        self.current_state = ComboState.IDLE
        self.combo_sequence = []  # 当前连招序列
        self.max_combo_length = 5  # 最大连击数
        self.combo_multiplier = 1  # 连击倍率

    def detect_input(self, keys):
        """增强输入检测,支持动态连招判定"""
        if self.current_state == ComboState.IDLE:
            if keys[pygame.K_j]:
                self._start_combo("J")
            elif keys[pygame.K_k]:
                self._start_combo("K")
        elif self.current_state == ComboState.LIGHT_PUNCH:
            if keys[pygame.K_j]:
                self._extend_combo("J+J")  # 二连击
            elif keys[pygame.K_l]:
                self._trigger_skill("J+L")  # 轻攻击接技能
        # 其他状态处理...

    def _start_combo(self, input_key):
        """启动新连招链"""
        self.combo_sequence = [input_key]
        self.current_state = ComboState.COMBO_CHAIN
        self._play_animation(f"combo_{input_key}")

    def _extend_combo(self, combo_input):
        """扩展连招序列"""
        if len(self.combo_sequence) < self.max_combo_length:
            self.combo_sequence.append(combo_input)
            # 检测特殊连招组合
            if self.combo_sequence == ["J", "J", "K"]:
                self._trigger_special_combo()
            self._update_multiplier()

    def _trigger_special_combo(self):
        """触发EX连击特效"""
        print("触发EX连击!")
        self.combo_multiplier = 2
        self._spawn_particles("ex_combo")

    def _update_multiplier(self):
        """动态调整连击倍率"""
        self.combo_multiplier = min(3, self.combo_sequence.count("J") * 0.5 + 1)

增强型技能系统(含资源管理)

class SkillSystem:
    def __init__(self):
        self.skills = {
            "Q": Skill("火遁·豪火球", 10, 30, 5, "fireball.png"),
            "W": Skill("影分身", 20, 60, 0, "clone.png"),
            "E": Skill("螺旋丸", 15, 45, 3, "rasengan.png")
        }
        self.resource = {
            "chakra": 100,  # 查克拉
            "stamina": 50   # 体力
        }

    def use_skill(self, skill_key):
        """增强技能使用逻辑"""
        skill = self.skills.get(skill_key)
        if skill and self._check_resource(skill):
            self._consume_resource(skill)
            self._execute_skill(skill)
            self._trigger_combo_bonus(skill)

    def _check_resource(self, skill):
        """资源检查(查克拉+体力)"""
        return (self.resource["chakra"] >= skill.cost and
                self.resource["stamina"] >= skill.stamina_cost)

    def _consume_resource(self, skill):
        """资源消耗逻辑"""
        self.resource["chakra"] -= skill.cost
        self.resource["stamina"] -= skill.stamina_cost
        print(f"消耗 {skill.cost} 查克拉")

    def _execute_skill(self, skill):
        """技能执行与特效"""
        print(f"释放技能: {skill.name}")
        self._play_sound(skill.sound)
        self._create_projectile(skill)

    def _trigger_combo_bonus(self, skill):
        """连招技能加成"""
        if self.combo_system.combo_multiplier > 1:
            skill.damage *= self.combo_system.combo_multiplier
            print(f"连击加成!伤害提升至 {skill.damage}")

核心增强功能说明

动态连招系统
  • 连招链扩展:支持5段连续输入判定(如J→J→K→L→↓)
  • 状态记忆:记录前3次输入用于组合技判断
  • 动态倍率:根据轻/重攻击比例调整伤害

示例:

# 组合技判定示例
if self.combo_sequence[-3:] == ["J", "↓", "K"]:
    self._trigger_ultimate("天照")

技能资源管理
  • 双资源系统:查克拉(技能) + 体力(移动)
  • # 技能消耗配置
  • "火遁·豪火球": {
        "cost": 10,
        "stamina": 5,
        "cooldown": 8
    }

可以加上枯竭机制,比如体力=0,移速减少-50%

组合技系统

class UltimateSystem:
    def __init__(self):
        self.ultimate_ready = False
        self.ultimate_charge = 0

    def charge_ultimate(self):
        """终极技蓄力"""
        if self.combo_system.combo_multiplier >= 2:
            self.ultimate_charge += 0.2
            if self.ultimate_charge >= 1.0:
                self.ultimate_ready = True

    def execute_ultimate(self):
        """奥义释放"""
        if self.ultimate_ready:
            print("释放须佐能乎!")
            self._play_fullscreen_effect()
            self.ultimate_charge = 0

绘制连招序列:
def draw_debug(self):
    # 绘制连招序列
    for i, input_key in enumerate(self.combo_sequence):
        pygame.draw.circle(screen, (255,0,0), (100+i*30, 100), 15)
        font = pygame.font.Font(None, 36)
        text = font.render(input_key, True, (255,255,255))
        screen.blit(text, (105+i*30, 105))

json文件设置参考:
{
    "combo_settings": {
        "max_length": 5,
        "damage_multiplier": {
            "light": 1.0,
            "heavy": 1.5,
            "special": 2.0
        }
    },
    "skill_tree": {
        "fire": {
            "unlock_at": 10,
            "upgrades": ["火遁·龙炎"]
        }
    }
}

大家可以看一下poki上面制作的死神vs火影3.3

死神VS火影33 - 免费在线玩 - CrazyGames-Poki

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐