当前位置: 首页 > backend >正文

五、小白如何用Pygame制作一款跑酷类游戏(主角跳跃和滑行动作的实现)

五、小白如何用Pygame制作一款跑酷类游戏(主角跳跃和滑行动作的实现)


文章目录

  • 五、小白如何用Pygame制作一款跑酷类游戏(主角跳跃和滑行动作的实现)
  • 前言
  • 一、添加主角的跳跃和滑行图片素材
  • 二、代码部分
    • 1.在走路状态时按下按键发生状态变化
    • 2.主角跳跃部分
    • 3.主角滑行部分
    • 4.为了使得在跑步阶段也能够切换为滑行和跳跃
    • 5.总结上述的完整代码
  • 三、实现效果


前言

本篇主要实现通过向下键和向上键的释放让主角能够跳跃和滑行


一、添加主角的跳跃和滑行图片素材

在这里插入图片描述
图片放在了 主角跳跃和滑行素材

二、代码部分

1.在走路状态时按下按键发生状态变化

 #步行状态if self.state==0:if args[0] % 6 == 0:i = int(args[0] / 6)self.image=self.walk[i % len(self.walk)]self.rect.top = 400# 实现按下向上键实现跳跃状态#实现按下向下键实现滑行状态if keys[pygame.K_UP]:self.state = 2self.flag = args[0]elif keys[pygame.K_DOWN]:self.state=3self.flag = args[0]

2.主角跳跃部分

设置为状态2

在跳跃部分为了更加生动并且可以越过障碍物进行了四个阶段的操作
第一个阶段上升的像素大
第二个阶段上升的像素小
第三个阶段下降的像素小
第四个阶段下降的像素大

 elif self.state==2:#在跳跃部分为了更加生动并且可以越过障碍物进行了四个阶段的操作#第一个阶段上升的像素大#第二个阶段上升的像素小#第三个阶段下降的像素小#第四个阶段下降的像素大if args[0] - self.flag <=9:if args[0] % 9 == 0:i = int(args[0] / 9)self.image = self.jump[i % len(self.jump)]# self.rect.left += 20self.rect.top -= 120elif args[0] - self.flag >9 and args[0] - self.flag <=36:if args[0] % 9 == 0:i = int(args[0] / 9)self.image = self.jump[i % len(self.jump)]# self.rect.left += 20self.rect.top -= 40elif args[0] - self.flag >36 and args[0] - self.flag <=63:if args[0] % 9 == 0:i = int(args[0] /9)self.image = self.jump[i % len(self.jump)]# self.rect.left += 20self.rect.top += 40elif args[0] - self.flag >63 and args[0] - self.flag <=72:if args[0] % 9 == 0:i = int(args[0] /9)self.image = self.jump[i % len(self.jump)]# self.rect.left += 20self.rect.top += 120if args[0] - self.flag >72:self.state = 0

3.主角滑行部分

设置为状态3

            elif self.state==3:if args[0] % 10 == 0:i = int(args[0] /10)self.image = self.down[i % len(self.down)]self.rect.top = 480# self.rect.left += 35if args[0] - self.flag >= 75:self.state = 0

4.为了使得在跑步阶段也能够切换为滑行和跳跃

            elif self.state==1:#设置一定的动作时长 超出之后变为步行态if args[0]-self.flag>=12:self.state=0if args[0] % 6 == 0:i = int(args[0] / 8)self.image=self.run[i % len(self.run)]self.rect.top = 430#奔跑状态时的状态切换if keys[pygame.K_UP]:self.state = 2self.flag = args[0]elif keys[pygame.K_DOWN]:self.state=3self.flag = args[0]elif keys[pygame.K_RIGHT]:self.state = 1self.flag = args[0]

5.总结上述的完整代码

import pygameclass Myself(pygame.sprite.Sprite):def __init__(self):super(Myself, self).__init__()self.image = pygame.image.load('material/image/myself/walk/1.PNG').convert_alpha()self.walk = [pygame.image.load('material/image/myself/walk/{:d}.PNG'.format(i)).convert_alpha() for i inrange(1, 8)]self.run = [pygame.image.load('material/image/myself/run/{:d}.PNG'.format(i)).convert_alpha() for i inrange(1, 6)]self.jump = [pygame.image.load('material/image/myself/jump/{:d}.PNG'.format(i)).convert_alpha() for i inrange(1, 7)]self.down = [pygame.image.load('material/image/myself/down/{:d}.PNG'.format(i)).convert_alpha() for i inrange(1, 7)]self.rect = self.walk[0].get_rect()self.rect.top=400self.rect.left=200self.state = 0  # 初始状态是步行态self.flag = 0 #设置标志位 记录按键按下的时钟def update(self, *args):#将是否暂停传递if args[2]:self.image=pygame.image.load('material/image/myself/walk/1.PNG').convert_alpha()else:#人物状态传递keys = args[1]#这里选择按下右箭头 是奔跑状态if keys[pygame.K_RIGHT]:self.state=1self.flag=args[0]#步行状态if self.state==0:if args[0] % 6 == 0:i = int(args[0] / 6)self.image=self.walk[i % len(self.walk)]self.rect.top = 400# 实现按下向上键实现跳跃状态#实现按下向下键实现滑行状态if keys[pygame.K_UP]:self.state = 2self.flag = args[0]elif keys[pygame.K_DOWN]:self.state=3self.flag = args[0]#奔跑状态elif self.state==1:#设置一定的动作时长 超出之后变为步行态if args[0]-self.flag>=12:self.state=0if args[0] % 6 == 0:i = int(args[0] / 8)self.image=self.run[i % len(self.run)]self.rect.top = 430#奔跑状态时的状态切换if keys[pygame.K_UP]:self.state = 2self.flag = args[0]elif keys[pygame.K_DOWN]:self.state=3self.flag = args[0]elif keys[pygame.K_RIGHT]:self.state = 1self.flag = args[0]elif self.state==2:#在跳跃部分为了更加生动并且可以越过障碍物进行了四个阶段的操作#第一个阶段上升的像素大#第二个阶段上升的像素小#第三个阶段下降的像素小#第四个阶段下降的像素大if args[0] - self.flag <=9:if args[0] % 9 == 0:i = int(args[0] / 9)self.image = self.jump[i % len(self.jump)]# self.rect.left += 20self.rect.top -= 120elif args[0] - self.flag >9 and args[0] - self.flag <=36:if args[0] % 9 == 0:i = int(args[0] / 9)self.image = self.jump[i % len(self.jump)]# self.rect.left += 20self.rect.top -= 40elif args[0] - self.flag >36 and args[0] - self.flag <=63:if args[0] % 9 == 0:i = int(args[0] /9)self.image = self.jump[i % len(self.jump)]# self.rect.left += 20self.rect.top += 40elif args[0] - self.flag >63 and args[0] - self.flag <=72:if args[0] % 9 == 0:i = int(args[0] /9)self.image = self.jump[i % len(self.jump)]# self.rect.left += 20self.rect.top += 120if args[0] - self.flag >72:self.state = 0elif self.state==3:if args[0] % 10 == 0:i = int(args[0] /10)self.image = self.down[i % len(self.down)]self.rect.top = 480# self.rect.left += 35if args[0] - self.flag >= 75:self.state = 0

三、实现效果

按向上键实现跳跃
在这里插入图片描述

在这里插入图片描述
按向下键实现滑行
在这里插入图片描述

http://www.xdnf.cn/news/511.html

相关文章:

  • Linux | I.MX6ULL 使用 Yocto 文件系统开发 QT
  • 015-C语言字符函数和字符串函数
  • java蓝桥杯b组
  • 大模型Rag - 两大检索技术
  • 【滑动窗口】最⼤连续 1 的个数 III(medium)
  • 【java实现+4种变体完整例子】排序算法中【桶排序】的详细解析,包含基础实现、常见变体的完整代码示例,以及各变体的对比表格
  • 大数据平台简介
  • 掌握 MySQL:从命令行操作到数据类型与字段管理
  • 论文阅读:2025 arxiv AI Alignment: A Comprehensive Survey
  • Zookeeper的通知机制是什么?
  • 【更新完毕】2025妈妈杯C题 mathercup数学建模挑战赛C题数学建模思路代码文章教学:音频文件的高质量读写与去噪优化
  • xilinx fpga中pll与mmcm的区别
  • 【DT】USB通讯失败记录
  • MySQL 全局锁:全量备份数据要怎么操作?
  • 04_银行个贷系统下的技术原理解析
  • LLM多卡并行计算:Accelerate和DeepSpeed
  • 数据可视化(Matplotlib和pyecharts)
  • 【云馨AI-大模型】2025年4月第三周AI领域全景观察:硬件革命、生态博弈与国产化突围
  • 【unity游戏开发入门到精通——UGUI】RectTransform矩形变换组件
  • 保生产 促安全 迎国庆
  • 平均池化(Average Pooling)
  • Ai Agent 在生活领域的深度应用与使用指南
  • 第七周作业
  • day29 学习笔记
  • Jenkins设置中文显示
  • Mermaid 是什么,为什么适合AI模型和markdown
  • webgl入门实例-向量在图形学中的核心作用
  • 【2025】Datawhale AI春训营-蛋白质预测(AI+生命科学)-Task2笔记
  • Cribl 优化EC2 ip-host-region 数据
  • 20-算法打卡-哈希表-赎金信-leetcode(383)-第二十天