动画是游戏开发中不可或缺的要素,游戏中的角色只有动起来才会拥有“生命”,
但动画处理也是最让游戏开发者头痛的部分。Pygame 包通过不断重新绘制绘图窗口,短短几行代码就可以让图片动起来!
动画处理程序的基本架构

import pygame

pygame.init()
screen = pygame.display.set_mode((640, 320))
pygame.display.set_caption("动画基本架构") background = pygame.Surface(screen.get_size())
background = background.convert()
background.fill((255,255,255)) clock = pygame.time.Clock() #建立时间组件 running = True
while running:
clock.tick(1) #每秒执行30次
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
screen.blit(background, (0,0)) #清除绘图窗口
pygame.display.update() #更新绘图窗口 pygame.quit() #关闭绘图窗口

绘次数越多,动画越流畅,但 CPU 负担越重,如果超
过负荷,程序可能引起死机。如无特殊需求,一般设为 30 。
水平移动的蓝色球体
下面我们通过一个水平移动的蓝色球体的例子来学习简单的动画处理程序 。
开始时,蓝色球体位于水平的中央位置并向右移动,碰到右边界时会反弹向左侧,碰到左边界时再反弹回右侧 。

import pygame

pygame.init()
screen = pygame.display.set_mode((640, 70))
pygame.display.set_caption("水平移动") background = pygame.Surface(screen.get_size())
background = background.convert()
background.fill((255,255,255)) ball = pygame.Surface((30,30)) #建立矩形绘图区
ball.fill((255,255,255)) #矩形区背景为白色
pygame.draw.circle(ball, (0,0,255), (15,15), 15, 0) #画一个蓝色球
rect1 = ball.get_rect() #取得球矩形区域
rect1.center = (320,45) #球起始位置 x, y = rect1.topleft #球左上角坐标
dx = 3 #球运动速度
clock = pygame.time.Clock() running = True
while running:
clock.tick(30) #每秒执行30次
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
screen.blit(background, (0,0)) #清除绘图窗口
x += dx #改变水平位置
rect1.center = (x,y)
if(rect1.left <= 0 or rect1.right >= screen.get_width()): #到达左右边界
dx *= -1
screen.blit(ball, rect1.topleft)
pygame.display.update()
pygame.quit()

制作一个可自由移动的蓝色球体
要想让一个球体可以向任何方向移动,需要把运动速度分解为水平速度及垂直
速度,我们通过控制水平与垂直两个方向的速度就能实现自由移动了。水平及垂直
速度可用三角函数取得,计算方式如下图:

开始时蓝色球体以随机角度向右上方移动,撞到边缘后会反弹并继续移动。

import pygame, random, math

pygame.init()
screen = pygame.display.set_mode((400, 300))
pygame.display.set_caption("自由移动") background = pygame.Surface(screen.get_size())
background = background.convert()
background.fill((255,255,255)) ball = pygame.Surface((30,30)) #建立矩形绘图区
ball.fill((255,255,255)) #矩形区域背景设为白色
pygame.draw.circle(ball, (0,0,255), (15,15), 15, 0) #画一个蓝色球体 rect1 = ball.get_rect() #取得球矩形区域
rect1.center = (random.randint(100,250),random.randint(150,250)) #球起始位置
x, y = rect1.topleft #球左上角坐标 direction = random.randint(20,70) #起始角度
radian = math.radians(direction) #转为弪度
dx = 5 * math.cos(radian) #球水平运动速度
dy = -5 * math.sin(radian) #球垂直运动速度 clock = pygame.time.Clock() running = True
while running:
clock.tick(30)
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
screen.blit(background, (0,0)) #清除绘图窗口
x += dx #改变水平位置
y += dy #改变垂直位置
rect1.center = (x,y)
if(rect1.left <= 0 or rect1.right >= screen.get_width()): #到达左右边界
dx *= -1 #水平速度变号
elif(rect1.top <= 5 or rect1.bottom >= screen.get_height()-5): #到达上下边界
dy *= -1 #垂直速度变号
screen.blit(ball, rect1.topleft)
pygame.display.update()
pygame.quit()

吴裕雄--天生自然python学习笔记:python 用pygame模块动画一让图片动起来的更多相关文章

  1. 吴裕雄--天生自然HADOOP学习笔记:hadoop集群实现PageRank算法实验报告

    实验课程名称:大数据处理技术 实验项目名称:hadoop集群实现PageRank算法 实验类型:综合性 实验日期:2018年 6 月4日-6月14日 学生姓名 吴裕雄 学号 15210120331 班 ...

  2. 吴裕雄--天生自然MySQL学习笔记:MySQL UPDATE 更新

    如果需要修改或更新 MySQL 中的数据,我们可以使用 SQL UPDATE 命令来操作. 语法 以下是 UPDATE 命令修改 MySQL 数据表数据的通用 SQL 语法: UPDATE table ...

  3. 吴裕雄--天生自然MySQL学习笔记:MySQL 插入数据

    MySQL 表中使用 INSERT INTO SQL语句来插入数据. 可以通过 mysql> 命令提示窗口中向数据表中插入数据,或者通过PHP脚本来插入数据. 以下为向MySQL数据表插入数据通 ...

  4. 吴裕雄--天生自然MySQL学习笔记:MySQL简介

    MySQL 是最流行的关系型数据库管理系统,在 WEB 应用方面 MySQL 是最好的 RDBMS(Relational Database Management System:关系数据库管理系统)应用 ...

  5. 吴裕雄--天生自然 oracle学习笔记:oracle理论学习详解及各种简单操作例子

    1. 数据库的发展过程 层次模型 -->网状模型 -->关系模型 -->对象关系模型 2. 关于数据库的概念 DB:数据库(存储信息的仓库) DBMS:数据库管理系统(用于管理数据库 ...

  6. 吴裕雄--天生自然HADOOP学习笔记:基本环境配置

    实验目的 学习安装Java 学习配置环境变量 学习设置免密码登陆的方法 掌握Linux环境下时间同步的配置 实验原理 1.Java的安装 java是大数据的黄金语言,这和java跨平台的特性是密不可分 ...

  7. 吴裕雄--天生自然HADOOP学习笔记:使用yum安装更新软件

    实验目的 了解yum的原理及配置 学习软件的更新与安装 学习源代码编译安装 实验原理 1.编译安装 前面我们讲到了安装软件的方式,因为linux是开放源码的,我们可以直接获得源码,自己编译安装.例如: ...

  8. 吴裕雄--天生自然HADOOP学习笔记:Shell工具使用

    实验目的 学习使用xshell工具连接Linux服务器 在连上的服务器中进入用户目录 熟悉简单的文件操作命令 实验原理 熟悉shell命令是熟悉使用linux环境进行开发的第一步,我们在linux的交 ...

  9. 吴裕雄--天生自然HTML学习笔记:HTML 布局

    网页布局对改善网站的外观非常重要. 请慎重设计您的网页布局. <!DOCTYPE html> <html> <head>  <meta charset=&qu ...

  10. 吴裕雄--天生自然MySQL学习笔记:MySQL 安装

    所有平台的 MySQL 下载地址为: MySQL 下载:https://dev.mysql.com/downloads/mysql/ 注意:安装过程我们需要通过开启管理员权限来安装,否则会由于权限不足 ...

随机推荐

  1. SAP_MM常用代码

    1.采购申请创建/修改/查看:ME51N/ME52N/ME53N 2.采购申请审批:ME54N 3.采购订单创建/修改/查看:ME21N/ME22N/ME23N 4.单个采购订单审批:ME29N 5. ...

  2. POJ 1745:Divisibility 枚举某一状态的DP

    Divisibility Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 11001   Accepted: 3933 Des ...

  3. Q6:ZigZag Conversion

    6. ZigZag Conversion 官方的链接:6. ZigZag Conversion Description : The string "PAYPALISHIRING"  ...

  4. dp--树形dp P1352 没有上司的舞会

    题目描述 某大学有N个职员,编号为1~N.他们之间有从属关系,也就是说他们的关系就像一棵以校长为根的树,父结点就是子结点的直接上司.现在有个周年庆宴会,宴会每邀请来一个职员都会增加一定的快乐指数Ri, ...

  5. 阿里云服务器centos下安装配置svn服务器

      阿里云服务器centos下安装配置svn服务器 1.安装svn服务器端yum install subversion      从镜像下载安装svn服务器端中间会提示是否ok,输入y,确认安装成功提 ...

  6. 吴裕雄--天生自然MySQL学习笔记:MySQL 复制表

    如果需要完全的复制MySQL的数据表,包括表的结构,索引,默认值等. 如果仅仅使用CREATE TABLE ... SELECT 命令,是无法实现的. 如何完整的复制MySQL数据表,步骤如下: 使用 ...

  7. DDL&DML

    SQL语言的DDL和DML DDL:数据定义语言它是用来定义 管理数据对象(数据库和数据表)的. create(创建),alter(修改),drop(删除) 一.创建数据库create datebas ...

  8. github新建一个单页

    比如可以在github上打开的网页是这种网址形式的:https://01xunsicheng.github.io/yumeihua/ 1.登录后首页找到 New repository 2.新建一个文件 ...

  9. 18. docker 容器部署 python-redis

    1. 编写 Vagrantfile 并创建虚拟机 并虚拟机绑定外部 192.168.205.10:8888 ip:port # -*- mode: ruby -*- # vi: set ft=ruby ...

  10. JAVA初学者——DOS命令及基本数据类型

    Hello!大家好!我是浩宇大熊猫~ 昨天看了韩顺平老师第二节视频的课,记忆尤新的是那个数据类型那一块,可是昨天感觉没掌握就没有发博客. 今天,又看了一遍,加上看了一些其他老师的,有所收获,所以分享给 ...