pygame实现方块动画实例讲解
作者:我的天才女友 发布时间:2022-11-01 13:37:46
标签:pygame,方块动画
导入组件
首先导入需要的组件,pygame游戏组件,time是时间组件
import pygame, time, sys
from pygame.locals import *
绘制窗口
这里定义了一个480*600的屏幕,设置了窗口标题,并设置了屏幕的填充颜色为白色
# 屏幕的宽高
WIDTH = 480
HEIGHT = 600
# 颜色的常量
WHITE = (255, 255, 255)
surface = pygame.display.set_mode((WIDTH, HEIGHT), 0, 30)
pygame.display.set_caption("矩形动画")
while True:
for event in pygame.event.get():
if event.type == QUIT:
pygame.quit()
sys.exit()
surface.fill(WHITE)
pygame.display.update()
绘制矩形
RED = (255, 0, 0)
# 定义矩形字典变量
rect = {'rect': pygame.Rect(200, 200, 60, 46), 'color': RED}
---
surface.fill(WHITE)
pygame.draw.rect(surface, rect['color'], rect['rect'])
---
让矩形动起来
从运动来看只有中心向四方移动的四种可能。定义四个方向的常量。
# 方向常量
UPLEFT = 'upleft'
UPRIGHT = 'upright'
DOWNLEFT = 'downleft'
DOWNRIGHT = 'downright'
然后定义矩形的移动速度
# 矩形移动的速度
MOVESPEED = 2
给矩形设置一个初始的移动方向
# 定义矩形字典变量
rect = {'rect': pygame.Rect(200, 200, 60, 46), 'color': RED, 'direction': UPLEFT}
根据矩形的移动方向改变对应的起始位置。根据矩形不同的位置改变矩形的起始位置。
# 如果是上左,则x y 都减少
if rect['direction'] == UPLEFT:
rect['rect'].left -= MOVESPEED
rect['rect'].top -= MOVESPEED
# 如果是上右,则x 增加 y 减少
if rect['direction'] == UPRIGHT:
rect['rect'].left += MOVESPEED
rect['rect'].top -= MOVESPEED
# 如果是下左,则x 减少 y 增加
if rect['direction'] == DOWNLEFT:
rect['rect'].left -= MOVESPEED
rect['rect'].top += MOVESPEED
# 如果是下右,则x y 都增加
if rect['direction'] == DOWNRIGHT:
rect['rect'].left += MOVESPEED
rect['rect'].top += MOVESPEED
不断的改变矩形的位置,要注意防止移出窗口,当触及到边缘,沿来的方向将矩形改变方向即可。
# 如果上溢出窗口
if rect['rect'].top <= 0:
if rect['direction'] == UPLEFT:
rect['direction'] = DOWNLEFT
if rect['direction'] == UPRIGHT:
rect['direction'] = DOWNRIGHT
# 如果下溢出窗口
if rect['rect'].bottom >= HEIGHT:
if rect['direction'] == DOWNRIGHT:
rect['direction'] = UPRIGHT
if rect['direction'] == DOWNLEFT:
rect['direction'] = UPLEFT
# 如果右溢出窗口
if rect['rect'].right >= WIDTH:
if rect['direction'] == DOWNRIGHT:
rect['direction'] = DOWNLEFT
if rect['direction'] == UPRIGHT:
rect['direction'] = UPLEFT
# 如果右溢出窗口
if rect['rect'].left <= 0:
if rect['direction'] == DOWNLEFT:
rect['direction'] = DOWNRIGHT
if rect['direction'] == UPLEFT:
rect['direction'] = UPRIGHT
这样就实现了功能。每次循环让时间暂停一会即可。
这里附上所有代码
import pygame, time, sys
from pygame.locals import *
# 屏幕的宽高
WIDTH = 480
HEIGHT = 600
# 颜色的常量
WHITE = (255, 255, 255)
RED = (255, 0, 0)
# 方向常量
UPLEFT = 'upleft'
UPRIGHT = 'upright'
DOWNLEFT = 'downleft'
DOWNRIGHT = 'downright'
# 矩形移动的速度
MOVESPEED = 2
# 定义矩形字典变量
rect = {'rect': pygame.Rect(200, 200, 60, 46), 'color': RED, 'direction': UPLEFT}
surface = pygame.display.set_mode((WIDTH, HEIGHT), 0, 30)
pygame.display.set_caption("矩形动画")
while True:
print(rect)
for event in pygame.event.get():
if event.type == QUIT:
pygame.quit()
sys.exit()
surface.fill(WHITE)
# 如果是上左,则x y 都减少
if rect['direction'] == UPLEFT:
rect['rect'].left -= MOVESPEED
rect['rect'].top -= MOVESPEED
# 如果是上右,则x 增加 y 减少
if rect['direction'] == UPRIGHT:
rect['rect'].left += MOVESPEED
rect['rect'].top -= MOVESPEED
# 如果是下左,则x 减少 y 增加
if rect['direction'] == DOWNLEFT:
rect['rect'].left -= MOVESPEED
rect['rect'].top += MOVESPEED
# 如果是下右,则x y 都增加
if rect['direction'] == DOWNRIGHT:
rect['rect'].left += MOVESPEED
rect['rect'].top += MOVESPEED
# 如果上溢出窗口
if rect['rect'].top <= 0:
if rect['direction'] == UPLEFT:
rect['direction'] = DOWNLEFT
if rect['direction'] == UPRIGHT:
rect['direction'] = DOWNRIGHT
# 如果下溢出窗口
if rect['rect'].bottom >= HEIGHT:
if rect['direction'] == DOWNRIGHT:
rect['direction'] = UPRIGHT
if rect['direction'] == DOWNLEFT:
rect['direction'] = UPLEFT
# 如果右溢出窗口
if rect['rect'].right >= WIDTH:
if rect['direction'] == DOWNRIGHT:
rect['direction'] = DOWNLEFT
if rect['direction'] == UPRIGHT:
rect['direction'] = UPLEFT
# 如果右溢出窗口
if rect['rect'].left <= 0:
if rect['direction'] == DOWNLEFT:
rect['direction'] = DOWNRIGHT
if rect['direction'] == UPLEFT:
rect['direction'] = UPRIGHT
pygame.draw.rect(surface, rect['color'], rect['rect'])
pygame.display.update()
time.sleep(0.02)
来源:https://blog.csdn.net/qq_40801987/article/details/121651961


猜你喜欢
- 01 示例函数1.1 代码及结果import matplotlib.pyplot as pltimport matplotlib.
- 前戏有时候生产环境是以项目来命名,有时候会出现更名情况,其实如何安全的更改数据库名,是个非常棘手的问题,特别是针对 MySQL 来数据库来说
- 今天遇到一个问题,使用python的find函数寻找字符串中的第一个空格时没有找到正确的位置,例如:http://zc.whmc.edu.c
- 用类和对象实现一个银行账户的资金交易管理, 包括存款、取款和打印交易详情, 交易详情中包含每次交易的时间、存款或者取款的金额、每次交易后的余
- python基于新浪sae开发的微信公众平台,实现功能:输入段子---回复笑话输入开源+文章---发送消息到开源中国输入快递+订单号---查
- 前言SciPy 是一个开源的 Python 算法库和数学工具包, Scipy 是基于 Numpy 的科学计算库,用于数学、科学、工程学等领域
- 什么是迭代(iteration)呢?给定一个list或者tuple,通过for循环来遍历这个list或者tuple、这种遍历就是迭代(ite
- 以前做音乐项目的时候,最让我们头痛的就是满足用户的问题。在音乐的领域,不要试图去满足所有用户这个定律得到了最充分的验证。究其原因,无非是音乐
- 随着网站的内容的增多和用户访问量的增多,无可避免的是网站加载会越来越慢,受限于带宽和服务器同一时间的请求次数的限制,我们往往需要在此时对我们
- 2016年9月22日凌晨,微信宣布“小程序”问世,妈的,论坛,博客全是小程序,昨天当之无愧抢了头条,当然只是开始内测了,微信公众平台对200
- 问题:我在 Vue 中有一个 form 表单,用于上传博客帖子,它有标题、正文、描述、片段和图片等范围。所有的一切都是必需的。我在 Expr
- 学习到的内容:1.一个64位的int类型值,充分利用高32位和低32位,进行相关加减以及从一个64位中拆出高32位和低32位.扩展:如何自己
- 1. 原始网站https://www.rbsp-ect.lanl.gov/data_pub/rbspa/2. 算法说明进入需要下载的数据所在
- 这里介绍了5中python获取window桌面路径的方法,获取这个路径有什么用呢?一般是将程序生成的文档输出到桌面便于查看编辑。前两个方法是
- 相信大家在学习python编程时绝对离不开数据库的连接,那么我们就用python来连接数据库实现一个简单的图书借阅系统。其实也很简单,就是在
- 我在Web服务器端安装了Web Server IIS4.0、Oracle Net8 for Client,并创建好了和Oracle8数据库的
- 引言如果你不确定TypeScript是什么,它基本上是一种建立在JavaScript之上的类型化语言。所有的JavaScript都是有效的T
- python安装第三方库大都是通过pip命令安装,这个命令确实是很简便的,而对于每个独立的项目来说,需要用到的库或许会不同,如果删除或更新原
- 本文研究的主要是Python面向对象之继承的相关内容,具体如下。Python 继承即一个派生类(derived class)继承基类(bas
- 1. 获取系统当前时间MySQL 版本为 5.7,详细的时间函数可以参考 MySQL 官方文档 在这里1.1. 获取 YYYY-MM-DD