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

  1. import pygame
  2.  
  3. pygame.init()
  4. screen = pygame.display.set_mode((640, 320))
  5. pygame.display.set_caption("动画基本架构")
  6.  
  7. background = pygame.Surface(screen.get_size())
  8. background = background.convert()
  9. background.fill((255,255,255))
  10.  
  11. clock = pygame.time.Clock() #建立时间组件
  12.  
  13. running = True
  14. while running:
  15. clock.tick(1) #每秒执行30次
  16. for event in pygame.event.get():
  17. if event.type == pygame.QUIT:
  18. running = False
  19. screen.blit(background, (0,0)) #清除绘图窗口
  20. pygame.display.update() #更新绘图窗口
  21.  
  22. pygame.quit() #关闭绘图窗口

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

  1. import pygame
  2.  
  3. pygame.init()
  4. screen = pygame.display.set_mode((640, 70))
  5. pygame.display.set_caption("水平移动")
  6.  
  7. background = pygame.Surface(screen.get_size())
  8. background = background.convert()
  9. background.fill((255,255,255))
  10.  
  11. ball = pygame.Surface((30,30)) #建立矩形绘图区
  12. ball.fill((255,255,255)) #矩形区背景为白色
  13. pygame.draw.circle(ball, (0,0,255), (15,15), 15, 0) #画一个蓝色球
  14. rect1 = ball.get_rect() #取得球矩形区域
  15. rect1.center = (320,45) #球起始位置
  16.  
  17. x, y = rect1.topleft #球左上角坐标
  18. dx = 3 #球运动速度
  19. clock = pygame.time.Clock()
  20.  
  21. running = True
  22. while running:
  23. clock.tick(30) #每秒执行30次
  24. for event in pygame.event.get():
  25. if event.type == pygame.QUIT:
  26. running = False
  27. screen.blit(background, (0,0)) #清除绘图窗口
  28. x += dx #改变水平位置
  29. rect1.center = (x,y)
  30. if(rect1.left <= 0 or rect1.right >= screen.get_width()): #到达左右边界
  31. dx *= -1
  32. screen.blit(ball, rect1.topleft)
  33. pygame.display.update()
  34. pygame.quit()

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

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

  1. import pygame, random, math
  2.  
  3. pygame.init()
  4. screen = pygame.display.set_mode((400, 300))
  5. pygame.display.set_caption("自由移动")
  6.  
  7. background = pygame.Surface(screen.get_size())
  8. background = background.convert()
  9. background.fill((255,255,255))
  10.  
  11. ball = pygame.Surface((30,30)) #建立矩形绘图区
  12. ball.fill((255,255,255)) #矩形区域背景设为白色
  13. pygame.draw.circle(ball, (0,0,255), (15,15), 15, 0) #画一个蓝色球体
  14.  
  15. rect1 = ball.get_rect() #取得球矩形区域
  16. rect1.center = (random.randint(100,250),random.randint(150,250)) #球起始位置
  17. x, y = rect1.topleft #球左上角坐标
  18.  
  19. direction = random.randint(20,70) #起始角度
  20. radian = math.radians(direction) #转为弪度
  21. dx = 5 * math.cos(radian) #球水平运动速度
  22. dy = -5 * math.sin(radian) #球垂直运动速度
  23.  
  24. clock = pygame.time.Clock()
  25.  
  26. running = True
  27. while running:
  28. clock.tick(30)
  29. for event in pygame.event.get():
  30. if event.type == pygame.QUIT:
  31. running = False
  32. screen.blit(background, (0,0)) #清除绘图窗口
  33. x += dx #改变水平位置
  34. y += dy #改变垂直位置
  35. rect1.center = (x,y)
  36. if(rect1.left <= 0 or rect1.right >= screen.get_width()): #到达左右边界
  37. dx *= -1 #水平速度变号
  38. elif(rect1.top <= 5 or rect1.bottom >= screen.get_height()-5): #到达上下边界
  39. dy *= -1 #垂直速度变号
  40. screen.blit(ball, rect1.topleft)
  41. pygame.display.update()
  42. 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. .NET Core开发实战(第11课:文件配置提供程序)--学习笔记

    11 | 文件配置提供程序:自由选择配置的格式 文件配置提供程序 Microsoft.Extensions.Configuration.Ini Microsoft.Extensions.Configu ...

  2. python类(4)——自己造第一个轮子

    先做简单版本,再一步步增加功能 1.简单目的:要实现这样一个功能,能够连接服务器,登录账号,查询账号委托信息,如果有委托信息,撤销委托. 属性(不同账户之间差别):账户,密码 方法(不同账户之间都要用 ...

  3. Html 常见标签,css基础样式,css的浮动和清流,浏览器的兼容

    1.html模板<!DOCTYPE html><html><head> <meta charset="UTF-8"> <tit ...

  4. iOS 中的延时操作方法

    1. dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(2 * NSEC_PER_SEC)), dispatch_get_main_q ...

  5. UVA 11375 高精度Bign类

    求火柴的组成的数字最多能组成多少种数字,典型的递推问题 但是因为结果巨大,要用高精度运算 一开始手写高精度,不仅挫的要死,最后还WA了. 最后学了一下白书上面的bign类,相当方便啊. #includ ...

  6. python编程:从入门到实践----第六章>字典

    一.一个简单的字典:alien_0存储外星人的颜色和点数,使用print打印出来 alien_0 = {'color': 'green','points': 5} print(alien_0['col ...

  7. 18 11 13 装了ssd 继续 网络通信 tcp 客户端的创建

    import socket def main(): # 1. 买个手机(创建套接字 socket) 联通公司建立了一个信号塔 tcp_server_socket = socket.socket(soc ...

  8. 基于迅为-i.MX6Q开发板制作镜像方法

    在“/home/imx6”目录(在前面编译 android 系统的时候新建过这个目录,如果没有可以自己新建一个)下,使用命令“mkdir minilinux/”新建 minilinux 目录,使用命令 ...

  9. MyBatis从入门到精通(第4章):MyBatis动态SQL【foreach、bind、OGNL用法】

    (第4章):MyBatis动态SQL[foreach.bind.OGNL用法] 4.4 foreach 用法 SQL 语句中有时会使用 IN 关键字,例如 id in (1,2,3).可以使用 ${i ...

  10. ZJNU 1244/1245 - 森哥数——高级

    打表找规律吧…… 一定要记得每一步都得开long long 然后可以发现所有的森哥数每一位只可能是0,1,2,3 就可以想到最高O(3^9)的算法 枚举1e9之内的所有满足条件的数判断 枚举9位数,最 ...