四、小白如何用Pygame制作一款跑酷类游戏(页面暂停和主角跑步动作的实现)

四、小白如何用Pygame制作一款跑酷类游戏(页面暂停和主角跑步动作的实现)


提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录

  • 四、小白如何用Pygame制作一款跑酷类游戏(页面暂停和主角跑步动作的实现)
  • 前言
  • 一、添加主角的跑步图片素材
  • 二、代码部分
    • 1.监听键盘的按下动作,与按键抬起不同
    • 2.在事件捕获部分,监听按键的抬起动作
    • 3.根据按键进行不同的页面变化
    • 3.根据按键进行不同的主角人物动作变化
    • 4.实现向右跑步后的完整的Myself.py代码(带注释)
    • 5.实现向右跑步后的完整的runner_main方法代码(带注释)
  • 实现效果


前言

本篇主要实现页面通过空格键的释放使得页面进行暂停和运行,对主角添加按下向右箭头按键实现向右快速跑步动作


一、添加主角的跑步图片素材

在这里插入图片描述
图片放在了主角跑步素材

二、代码部分

1.监听键盘的按下动作,与按键抬起不同

keys = pygame.key.get_pressed()

2.在事件捕获部分,监听按键的抬起动作

        for event in pygame.event.get():if event.type == pygame.QUIT:running = False#空格键作为暂停键 当空格键抬起时触发暂停动作#如果当前是运动状态,抬起空格变为暂停#如果当前是暂停状态,抬起空格变为运动elif event.type == pygame.KEYUP:if not isPause:if event.key == pygame.K_SPACE:isPause = Trueelse:if event.key == pygame.K_SPACE:isPause = False

3.根据按键进行不同的页面变化

 #暂停状态下,道路不会向左滑动if isPause:margin=0else:margin=3#通过提升道路的滑动效果体现出疾跑的效果if keys[pygame.K_RIGHT]:margin=8

3.根据按键进行不同的主角人物动作变化

# 暂停状态下,主角也要保持静止,也就是说主角直保持一个动作,因此要传递一个参数给主角精灵
# 通过按下键盘的事件更改主角的状态,因此也需传递一个参数给主角来决定状态比如奔跑、跳跃以及滑行
screen.blit(myself.image, myself.rect)
myself.update(index,keys,isPause)

4.实现向右跑步后的完整的Myself.py代码(带注释)

import pygame
class 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.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#奔跑状态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

5.实现向右跑步后的完整的runner_main方法代码(带注释)


import pygame
from Myself import Myself
import ospygame.init()
clock = pygame.time.Clock()
screen = pygame.display.set_mode((1080, 600))
pygame.display.set_caption('跑酷游戏')
#背景图
bg_image_path1 = 'material/image/background4.jpg'
bg_img_obj1 = pygame.image.load(bg_image_path1).convert_alpha()
#道路图
road_image_path= 'material/image/road1.png'
road_img_obj=pygame.image.load(road_image_path).convert_alpha()
#距离图
km_image_path= 'material/image/km.png'
km_img_obj=pygame.image.load(km_image_path).convert_alpha()
#按键图
keyUp_image_path= 'material/image/keyboardUpUp.png'
keyUp_img_obj=pygame.image.load(keyUp_image_path).convert_alpha()
keyLeft_image_path= 'material/image/keyboardLEFT.png'
keyLeft_img_obj=pygame.image.load(keyLeft_image_path).convert_alpha()
keyDown_image_path= 'material/image/keyboardDown.png'
keyDown_img_obj=pygame.image.load(keyDown_image_path).convert_alpha()
font_path = 'material/ziti/AlimamaFangYuanTiVF-Thin-2.ttf'  # 例如 'SimSun.ttf'
chinese_font = pygame.font.Font(font_path, 30)
text_surface = chinese_font.render('跳跃', True, (0, 0, 255))
text1_surface = chinese_font.render('疾跑', True, (0, 0, 255))
text2_surface = chinese_font.render('滑行', True, (0, 0, 255))
def init():fps = 60running = Trueindex = 0left = 0right = 1080margin = 3myself = Myself()pygame.mixer.music.load(os.path.join('material/music', 'bgm1.mp3'))pygame.mixer.music.play(-1)km = '0'#标志位是否暂停isPause = Falsewhile running:# 获取键盘的按下事件,与抬起不同keys = pygame.key.get_pressed()for event in pygame.event.get():if event.type == pygame.QUIT:running = False#空格键作为暂停键 当空格键抬起时触发暂停动作#如果当前是运动状态,抬起空格变为暂停#如果当前是暂停状态,抬起空格变为运动elif event.type == pygame.KEYUP:if not isPause:if event.key == pygame.K_SPACE:isPause = Trueelse:if event.key == pygame.K_SPACE:isPause = False#暂停状态下,道路不会向左滑动if isPause:margin=0else:margin=3#通过提升道路的滑动效果体现出疾跑的效果if keys[pygame.K_RIGHT]:margin=8screen.blit(bg_img_obj1, (0, 0))screen.blit(road_img_obj, (left, 465))screen.blit(road_img_obj, (right, 465))#键位介绍screen.blit(keyUp_img_obj, (900, 5))screen.blit(text_surface, (980, 23))screen.blit(keyLeft_img_obj, (900, 70))screen.blit(text1_surface, (980, 88))screen.blit(keyDown_img_obj, (900, 135))screen.blit(text2_surface, (980, 148))if left<=-1080:left=left+2160if right<=-1080:right=right+2160# 暂停状态下,主角也要保持静止,也就是说主角直保持一个动作,因此要传递一个参数给主角精灵# 通过按下键盘的事件更改主角的状态,因此也需传递一个参数给主角来决定状态比如奔跑、跳跃以及滑行screen.blit(myself.image, myself.rect)myself.update(index,keys,isPause)screen.blit(km_img_obj, (10, 70))km_font = pygame.font.SysFont('arial', 30)km_num_surface = km_font.render(km, True, (0, 0, 255))screen.blit(km_num_surface, (80, 88))if index%6==0:km = str(int(km) + margin)index += 1pygame.display.update()clock.tick(fps)left -= marginright -= margin
if __name__=="__main__":init()

实现效果

按下向右疾跑键后实现加速效果
在这里插入图片描述
按下暂停键后实现暂停效果
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/76191.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

《基于 RNN 的股票预测模型代码优化:从重塑到直接可视化》

在深度学习领域&#xff0c;使用循环神经网络&#xff08;RNN&#xff09;进行股票价格预测是一个常见且具有挑战性的任务。本文将围绕一段基于 RNN 的股票预测代码的改动前后差别展开&#xff0c;深入剖析代码的优化思路和效果。 原始代码思路与问题 原始代码实现了一个完整…

Lambda 函数与 peek 操作的使用案例

Lambda 函数和 peek 操作是 Java 8 Stream API 中非常有用的特性&#xff0c;下面我将介绍它们的使用案例。 Lambda 函数使用案例 Lambda 表达式是 Java 8 引入的一种简洁的匿名函数表示方式。 集合操作 List<String> names Arrays.asList("Alice", "B…

Docker私有仓库页面访问实现

通过 docker run -d -p 5000:5000 --name registry registry:2 命令搭建的Docker私有仓库默认不提供网页访问界面。它是一个基于API的后端服务&#xff0c;主要用于镜像的存储和管理。但可以通过以下两种方式实现网页访问&#xff1a; 一、通过第三方Web UI工具扩展 1. 使用 D…

[王阳明代数讲义]语言模型核心代码调研

语言模型核心代码调研 基于Consciciteation‌的才气张量持续思考综述将文本生成建模为才气张量网络扩散过程&#xff0c;实现非自回归推理通过才气张量的群-拓扑流形交叉注意力实现多模态推理&#xff0c;将输入压缩到低维空间持续迭代提出「条件计算提前终止」机制&#xff0c…

flink jobmanager离奇的heap oom

文章目录 现象描述开始分析1.初步分析dump文件2.AI分析引用关系分析方向2.1 flink BlobServer bug分析方向2.2 和运行环境有关分析方向2.3 和任务有关 回到问题本身&#xff0c;思考一下1. seatunnel到底有没有问题2.再次分析zipfile对象3.分析seatunnel es connector 源码4 怀…

APP动态交互原型实例|墨刀变量控制+条件判断教程

引言 不同行业的产品经理在绘制原型图时&#xff0c;拥有不同的呈现方式。对于第三方软件技术服务公司的产品经理来说&#xff0c;高保真动态交互原型不仅可以在开发前验证交互逻辑&#xff0c;还能为甲方客户带来更直观、真实的体验。 本文第三部分将分享一个实战案例&#…

AI 驱动下的后端开发架构革命:从智能协同体系

AI 驱动下的后端开发架构革命&#xff1a;从智能协同体系 一、引言&#xff1a;AI 重构后端开发范式 在 2025 年的企业级技术演进中&#xff0c;人工智能正从辅助工具升级为核心架构要素。根据 Gartner《2025 智能技术栈成熟度报告》&#xff0c;传统 "人力编码 硬规则…

安卓基础(生命周期)

创建阶段&#xff1a;onCreate方法被调用&#xff0c;用于初始化 Activity&#xff0c;如设置布局等。启动阶段&#xff1a;依次调用onStart和onResume方法&#xff0c;让 Activity 变得可见并可与用户交互。暂停与恢复阶段&#xff1a;当 Activity 失去焦点但可见时&#xff0…

Uniapp: 下拉选择框 ba-tree-picker

目录 1、效果展示2、如何使用2.1 插件市场2.2 引入插件 3、参数配置3.1 属性3.2 方法 4、遇见的问题4.1、设置下拉树的样式 1、效果展示 2、如何使用 2.1 插件市场 首先从插件市场中将插件导入到项目中 2.2 引入插件 在使用的页面引入插件 <view click"showPicke…

Spring Boot实战:基于策略模式+代理模式手写幂等性注解组件

一、为什么需要幂等性&#xff1f; 核心定义&#xff1a;在分布式系统中&#xff0c;一个操作无论执行一次还是多次&#xff0c;最终结果都保持一致。 典型场景&#xff1a; 用户重复点击提交按钮网络抖动导致的请求重试消息队列的重复消费支付系统的回调通知 不处理幂等的风…

如何恢复极狐GitLab?

极狐GitLab 是 GitLab 在中国的发行版&#xff0c;关于中文参考文档和资料有&#xff1a; 极狐GitLab 中文文档极狐GitLab 中文论坛极狐GitLab 官网 恢复极狐GitLab (BASIC SELF) 极狐GitLab 提供了一个命令行界面来恢复整个安装&#xff0c;足够灵活以满足您的需求。 恢复…

面试高阶问题:android后台任务(如数据同步、定位)消耗过多电量,导致用户投诉。你会如何分析和优化后台任务的执行?

在现代移动设备生态中,安卓系统以其开放性和灵活性占据了全球智能手机市场的绝大部分份额。作为一款功能强大的操作系统,安卓允许应用程序在后台执行各种任务,例如数据同步、定位服务、消息推送以及其他周期性更新。这些后台任务在提升用户体验方面扮演了不可或缺的角色——…

最近在学习web搞大屏看板

人到中年&#xff0c;delphi发展越来越不行&#xff0c;就业环境是真差啊&#xff0c;没办法&#xff0c;学呗 中国地图&#xff1a; // 中国地图function getChinaMapChart() {// 初始化echarts实例var myEcharts echarts.init(document.getElementById("china_box"…

117.在 Vue 3 中使用 OpenLayers 实现 CTRL 控制拖拽和滚动缩放

✨ 前言 在使用 OpenLayers 开发地图类项目时,我们有时会希望用户必须按下 CTRL(或 Mac 的 Command ⌘ 键)才能拖拽地图或使用鼠标滚轮缩放。这种交互方式能够避免用户在浏览页面时意外滑动或拖动地图,尤其是在地图嵌入页面中时非常有用。 本文将带你一步一步实现在 Vue …

MATLAB 控制系统设计与仿真 - 34

多变量系统知识回顾 - MIMO system 这一章对深入理解多变量系统以及鲁棒分析至关重要 首先,对于如下系统: 当G(s)为单输入,单输出系统时: 如果: 则: 所以 因此,对于SISO,系统的增益跟w有关系, 当G(s)为MIMO时,例如2X2时, 假设输入信号为:

ARCGIS PRO DSK 利用两期地表DEM数据计算工程土方量

利用两期地表DEM数据计算工程土方量需要准许以下数据&#xff1a; 当前地图有3个图层&#xff0c;两个栅格图层和一个矢量图层 两个栅格图层&#xff1a;beforeDem为工程施工前的地表DEM模型 afterDem为工程施工后的地表DEM模型 一个矢量图层&#xf…

最快打包WPF 应用程序

在 Visual Studio 中右键项目选择“发布”&#xff0c;目标选“文件夹”&#xff0c;模式选“自包含”&#xff0c;生成含 .exe 的文件夹&#xff0c;压缩后可直接发给别人或解压运行&#xff0c;无需安装任何东西。 最简单直接的新手做法&#xff1a; 用 Visual Studio 的“…

物联网通信协议——TCP与MQTT的对比

在物联网通信中&#xff0c;MQTT和TCP的实现方式和原理完全不同&#xff0c;因为两者属于协议栈的不同层级&#xff0c;解决的问题也不同。以下从协议层级、工作机制和典型场景三个角度详细解释&#xff1a; 1. 协议层级与定位 特性TCPMQTT协议层级传输层&#xff08;第4层&am…

【信息系统项目管理师】高分论文:论信息系统项目的成本管理(媒体融合采编平台)

更多内容请见: 备考信息系统项目管理师-专栏介绍和目录 文章目录 论文1、规划项目成本管理2、估算成本3、制订项目预算4、控制成本论文 2017年7月,我作为项目经理参与了 XX省媒体融合采编平台的建设,该项目总共投资530万元,其中服务器、存储、网络等硬件设备投资200万元、软…

策略模式简单介绍

什么是策略模式&#xff1f;一般用于什么场景&#xff1f; 策略模式一种行为型设计模式&#xff0c;它定义了一系列算法&#xff0c;并将每个算法封装起来&#xff0c;使得它们可以相互替换&#xff0c;这样&#xff0c;客户端可以根据需要在运行时选择合适的算法&#xff0c;…