python全免费教程制作平台跳越游戏小白新手入门必看(三)
这次以死神VS火影为例使用pythonpygame为例unity实现方案有些麻烦# 角色基类# 连招系统实现return "X连击"# 碰撞检测(AABB算法)# 技能释放逻辑。
这次以死神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平台 |
| 背景图 | OpenGameArt免费素材 |
OpenGameArt |
| 音效 | 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
魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐
所有评论(0)