Pygame教程05:帧动画原理+边界值检测,让小球来回上下运动

news2025/1/16 5:57:36

------------★Pygame系列教程★------------

Pygame教程01:初识pygame游戏模块

Pygame教程02:图片的加载+缩放+旋转+显示操作

Pygame教程03:文本显示+字体加载+transform方法

Pygame教程04:draw方法绘制矩形、多边形、圆、椭圆、弧线、直线和线条等

Pygame教程05:帧动画原理+边界值检测,让小球来回上下运动
1.pygame动画的原理:主要基于帧动画的概念。在帧动画中,每一帧都表示动画的一个小部分或状态。通过快速连续地显示这些帧,人眼会将这些帧合并成一个连续的动态效果,这就是动画的基本原理。简单来说,就是通过不断更新和绘制对象的状态,并利用人眼的视觉暂留效应,将连续的帧合并成动态的视觉效果。
要实现动画效果,通常需要做以下几个步骤:
初始化pygame环境。
创建窗口或屏幕对象。
定义动画对象(例如小球、角色等),并为其设置属性(如位置、速度、大小等)。
在一个循环中,不断更新动画对象的状态(例如位置)。
在每一帧中,清除屏幕,然后重新绘制动画对象。
使用pygame.display.flip()或pygame.display.update()刷新屏幕,以显示新的帧。
通过pygame.time.Clock().tick(fps)控制帧率,其中fps表示每秒帧数。帧率决定了动画的流畅度,通常建议至少30fps以获得平滑的动画效果。
2.小球的循环上下运动:我们首先初始化 Pygame,并设置窗口大小。然后,我们定义了一些常量,包括小球的半径、位置和移动速度。在游戏主循环中,我们不断绘制小球,并根据其速度更新其 y 坐标。当小球碰到屏幕顶部或底部时,我们反转其移动方向,从而实现上下移动的效果。
注意,这个示例中的小球会不断在屏幕上下反弹。如果你想要小球只向上或只向下移动,你可以相应地调整 ball_speed 的值和条件判断逻辑。
在这里插入图片描述

# @Author : 小红牛
# 微信公众号:WdPython
import pygame
import sys

# 初始化 Pygame
pygame.init()

# 1.设置窗口大小
screen_width = 400
screen_height = 600
screen = pygame.display.set_mode((screen_width, screen_height))

# 2.设置颜色常量
WHITE = (255, 255, 255)
RED = (255, 0, 0)

# 3.设置小球属性
ball_radius = 20
# 初始位置xy
ball_x = screen_width // 2
ball_y = screen_height // 2
ball_speed = 0.1  # 控制小球移动速度

# 游戏主循环
while True:
    # 处理事件
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            # 关闭游戏
            pygame.quit()
            sys.exit()

    # 1.清空屏幕
    screen.fill(WHITE)
    # 2.绘制小球
    pygame.draw.circle(screen, RED, (ball_x, ball_y), ball_radius)
    # 上下运动:改变y坐标,更新小球位置
    ball_y -= ball_speed  # 向上移动
    # print(ball_y)

    # 3.边界检测:确保小球不会移出屏幕
    if ball_y < ball_radius:  # 反转方向,向下移动
        ball_speed = -ball_speed

    if ball_y + ball_radius > screen_height:  # 反转方向,向上移动
        ball_speed = -ball_speed

    # 4.刷新屏幕显示
    pygame.display.flip()

3.小球左右循环运动:改变小球X坐标,理解屏幕的宽度和小球半径,及移动后的X坐标之间的变化关系,实现边界检测。

# 左右运动:改变x坐标,更新小球位置
    ball_x -= ball_speed  # 向上移动
    # print(ball_x)

    # 边界检测:确保小球不会移出屏幕
    if ball_x < ball_radius:  # 反转方向,右移动
        ball_speed = -ball_speed

    if ball_x > screen_width - ball_radius:  # 反转方向,左移动
        ball_speed = -ball_speed

完毕!!感谢您的收看

----------★★历史博文集合★★----------

Python入门篇 进阶篇 视频教程 Py安装

py项目 Python模块 Python爬虫 Json

Xpath 正则表达式 Selenium Etree Css

Gui程序开发 Tkinter Pyqt5 列表元组字典

数据可视化 matplotlib 词云图 Pyecharts

海龟画图 Pandas Bug处理 电脑小知识

office自动化办公 编程工具 NumPy Pygame

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

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

相关文章

2024.3.5每日一题

LeetCode 到达目的地的方案数 题目链接&#xff1a;1976. 到达目的地的方案数 - 力扣&#xff08;LeetCode&#xff09; 题目描述 你在一个城市里&#xff0c;城市由 n 个路口组成&#xff0c;路口编号为 0 到 n - 1 &#xff0c;某些路口之间有 双向 道路。输入保证你可以…

TDengine 资深研发分享解决思路,长查询不再成为系统性能瓶颈!

长查询问题指的是在数据库写入和查询并存的日常应用场景中&#xff0c;存在处理数据量大且耗时很长的查询长时间占用系统资源&#xff0c;导致写入可能被阻塞的问题。有时&#xff0c;查询代码对于资源释放函数调用的遗忘也可能以长查询问题的形式表现出来。如何在数据写入不被…

SCCM部署时出现的问题(二):找不到数据库路径

场景还原&#xff1a; 在部署SCCM服务器时&#xff0c;客户采用的是分开部署&#xff0c;即一台SCCM服务器和一台SQL Server服务器。 在搭建SCCM服务器时&#xff0c;我们指定了数据库实例&#xff0c;跳转到指定SQL Server数据文件和事务日志文件的位置时&#xff0c;出现了…

大学机器人专业相关课程太难了怎么办

这个问题其实有个更合适的提问角度。 {大学机器人专业相关课程太难了一点兴趣都没有怎么办} 个性化、差异化发展才是主流。 人工智能时代&#xff0c;学生再卷再拼&#xff0c;也干不过机器人啊…… 这个问题反馈非常普遍。 常规解释 大学课程其实想要理解并应用起来&#xff…

Salesforce 2024财年爆发式增长!第一次现金分红

对于Salesforce来说&#xff0c;这是非凡的转型之年&#xff0c;所有的关键指标都表现强劲&#xff0c;现金流和利润增长创下了纪录。截至第四季度末&#xff0c;Salesforce的剩余履约价值&#xff08;RPO&#xff09;总额为569亿美元&#xff0c;同比增长17%。 Marc Benioff …

NLP自然语言——基础

一、介绍 1、概念 NLP&#xff08;Natural Language Processing&#xff0c;自然语言处理&#xff09;是计算机科学领域以及人工智能领域的一个重要的研究方向&#xff0c;它研究用计算机来处理、理解以及运用人类语言&#xff08;如中文、英文等&#xff09;&#xff0c;达到…

Error:java:JDK isn‘t specified for module “模块名称“

可能是创建模块后不小心删掉了.idea.或.idea出错 只要删除.idea&#xff0c;close project出去&#xff0c;重新进让idea自动下载

Flyway 9.22.3 + springboot3 + MySQL8.0+,简单使用

文章目录 flyway的依赖配置ieda 启动&#xff01;&#xff01;&#xff01; 关于这篇文章主要是自己在使用flyway时遇到的一些问题以及最终的解决方法 当然包括所有的配置&#xff0c;主要目的是记录一下防止下次使用的时候忘记 flyway的依赖 这里 springboot 3 具体版本不再描…

Day12:信息打点-Web应用源码泄漏开源闭源指纹识别GITSVNDS备份

目录 开源-CMS指纹识别源码获取方式 闭源-习惯&配置&特性等获取方式 闭源-托管资产平台资源搜索监控 思维导图 章节点 Web&#xff1a;语言/CMS/中间件/数据库/系统/WAF等 系统&#xff1a;操作系统/端口服务/网络环境/防火墙等 应用&#xff1a;APP对象/API接口/微…

基于selenium自动化索引点击

小鹅快速刷题&#xff0c;根据selenium和xpath定位题干&#xff0c;使用模糊匹配fuzzywuzzy库查找题目匹配答案&#xff0c;自动点击&#xff0c;完成后更新题库 先导入基本包&#xff0c;准备好题库 from fuzzywuzzy import process from selenium import webdriver import …

Android Split APK是什么

Android Split APK是一项应用程序分发和安装的技术&#xff0c;可以将大型应用程序拆分为多个较小的模块&#xff0c;以便用户可以选择性地下载和安装所需的模块&#xff0c;而无需一次性下载整个应用程序。这种技术旨在提高用户体验、减少下载时间和节省存储空间。 Android S…

什么是红黑树?用一组数据来介绍一下红黑树

上篇博客&#xff0c;我们使用代码完成了一个简单的红黑树功能&#xff0c;这篇&#xff0c;我补充一下&#xff0c;关于红黑树的相关知识点。 红黑树概述 红黑树是一种自平衡的二叉搜索树&#xff0c;它在每个节点上增加了一个存储位来表示节点的颜色&#xff0c;可以是红色…

信息安全与阿里云等保三级方案实践总结

信息安全在当今数字化时代变得至关重要&#xff0c;企业和组织需要采取有效措施来保护其数据和信息资产。阿里云作为中国领先的云服务提供商&#xff0c;提供了等保三级方案&#xff0c;帮助用户满足国家信息安全等级保护的要求。本文将探讨信息安全和阿里云等保三级方案的重要…

多媒体信息处理-重点知识-3. Feature Indexing and Retrieval

Chap 3. Feature Indexing and Retrieval 什么是索引&#xff1f; 为了提高数据集的检索效率而生成的结构化信息 基于特征的相似度匹配是多媒体数据检索方法的基础 从多媒体对象中提取重要特征&#xff0c;将其转化成高维特征向量存储在数据库中 相似性度量&#xff1a; 两种…

数据库|基于TiDB Binlog架构的主备集群切换操作手册

目录 一、具体操作过程 //1、停业务&#xff0c;待drainer追平主、备库数据 //2、使用sync-diff-inspector校验主从库数据是否一致 //3、关停主库到灾备库drainer同步链路后记录当前drainer同步TSO //4、使用dumpling/BR对灾备库进行数据全量备份&#xff08;备份期间可继…

leetcode——异或运算—— 只出现一次的数字

给你一个 非空 整数数组 nums &#xff0c;除了某个元素只出现一次以外&#xff0c;其余每个元素均出现两次。找出那个只出现了一次的元素。 你必须设计并实现线性时间复杂度的算法来解决此问题&#xff0c;且该算法只使用常量额外空间。 示例 1 &#xff1a; 输入&#xff…

【Web安全靶场】sqli-labs-master 21-37 Advanced-Injection

sqli-labs-master 21-37 Advanced-Injection 第一关到第二十关请见专栏 文章目录 sqli-labs-master 21-37 Advanced-Injection第二十一关-Cookie注入第二十二关-Cookie注入第二十三关-注释符过滤的报错注入第二十四关-二次注入第二十五关-过滤OR、AND双写绕过第二十五a关-过滤…

关于 Runes 协议及「公开铭刻」发行机制的拓展讨论

撰文&#xff1a;MiX 编辑&#xff1a;Faust&#xff0c;极客 web3 2024 年 3 月 2 日&#xff0c;Runes 生态基础设施项目 Rune alpha 的创始人&#xff0c;在 Github 的公开议题中&#xff0c;与 Runes 协议创始人 Casey 展开了讨论&#xff0c;双方对如何拓展 Runes 协议的…

【QT】事件分发器/事件过滤器/事件处理的介绍和使用

事件分发函数 event() 事件分发器&#xff1a;返回值 bool 如果返回时true&#xff0c;代表用户要处理事件&#xff0c;不再分发事件了。 事件对象创建完毕后&#xff0c;Qt 将这个事件对象传递给QObject的event()函数。event()函数并不直接处理事件&#xff0c;而是将这些事…

PS在图片上直线、虚线、曲线

使用钢笔工具和直线工具都可以画直线&#xff0c;