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

五、小白如何用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

三、实现效果

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

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

相关文章:

  • 如何基于区块链进行虚拟电厂运营平台建设?
  • 实现批量图片文字识别(python+flask+EasyOCR)
  • 备份jenkins
  • MCP是什么?为什么突然那么火?
  • 文档内容提取以及合成
  • kafka认证部署
  • 李宏毅NLP-5-RNNTNeural TransducerMoChA
  • LPDDR中读操作不存在Additive Latency(AL)的技术思考
  • Python scikit-learn 机器学习算法实践
  • 2025年KBS SCI1区TOP:增强天鹰算法EBAO,深度解析+性能实测
  • 指针函数和函数指针
  • C++游戏服务器开发之⑦redis的使用
  • MAUI项目iOS应用以进 App Store 分发
  • 免费将AI生成图像放大4倍的方法
  • 图像预处理-绘制图像轮廓与凸包
  • PyTorch `flatten()` 和 `squeeze()` 区别
  • c++ 类的语法1
  • 大学英语四级选词填空练习题解析
  • asp.net core webapi+efcore
  • 实现AWS Step Function安全地请求企业内部API返回数据
  • 上海崇明“人鸟争食”何解?检察机关推动各方寻找最优解
  • 国常会:要持续稳定股市,持续推动房地产市场平稳健康发展
  • 工信部:计划出台机械、汽车、电力装备等三个行业新一轮稳增长工作方案
  • 擘画开放新篇 共筑合作之桥——中国银行上海市分行全力护航第八届进博会筹备工作
  • 加力扩围支持消费品以旧换新,江苏要送出1800万元彩票
  • 经济日报经世言:不断开创中马关系发展新局面