上一节的基础上,结合高中物理中的匀加速直线运动位移公式 ,就能做出类似超级玛丽的弹跳效果。

  1. import pygame
  2.  
  3. pygame.init()
  4.  
  5. win = pygame.display.set_mode((200, 400)) # 画布窗口的大小
  6. pygame.display.set_caption("first game") # 窗口标题
  7.  
  8. x, y = 85, 300 # 方块的起点
  9. width, height = 30, 30 # 方块的宽,高
  10. speed = 5 # 速度
  11.  
  12. run = True
  13. isJump = False
  14. t = 10
  15.  
  16. while run:
  17. # 防止cpu占用过高
  18. pygame.time.delay(10)
  19.  
  20. for event in pygame.event.get():
  21. if event.type == pygame.QUIT:
  22. run = False
  23.  
  24. keys = pygame.key.get_pressed()
  25.  
  26. # 方向箭头响应
  27. if not (isJump):
  28. if keys[pygame.K_LEFT] and x > 0:
  29. x -= speed
  30.  
  31. if keys[pygame.K_RIGHT] and x < win.get_size()[0] - width:
  32. x += speed
  33.  
  34. if keys[pygame.K_UP] and y > 0:
  35. y -= speed
  36.  
  37. if keys[pygame.K_DOWN] and y < win.get_size()[1] - height:
  38. y += speed
  39.  
  40. if keys[pygame.K_SPACE]:
  41. isJump = True
  42. else:
  43. if t >= -10:
  44. a = 1 # 前半段减速上跳
  45. if t < 0:
  46. a = -1 # 后半段加速下落
  47. y -= 0.5 * a * (t ** 2) # 匀加速直线运动的位移公式
  48.  
  49. if y < 0:
  50. y = 0 # 防止跳出边界
  51. t -= 1
  52. else:
  53. isJump = False
  54. t = 10
  55.  
  56. # 将每一帧的底色先填充成黑色
  57. win.fill((0, 0, 0))
  58. # 画方块
  59. pygame.draw.rect(win, (255, 0, 0), (x, y, width, height))
  60. # 更新画布
  61. pygame.display.update()
  62.  
  63. pygame.quit()

效果:

参考:

https://www.youtube.com/watch?v=2-DNswzCkqk

pygame 笔记-2 模仿超级玛丽的弹跳的更多相关文章

  1. pygame 笔记-10 摩擦力与屏幕环绕

    多年前写过一篇 Flash/Flex学习笔记(25):摩擦力与屏幕环绕,可惜的当时上传的flash,服务器后来无人维护,现在flash链接都失效了.本篇用pygame重新实现了一个: 原理是类似,但要 ...

  2. 桦仔 笔记4-徐 模仿灾难发生时还原adventurework数据库 示例 stopat

    1 --模仿灾难发生时还原adventurework数据库 示例 stopat 2 3 BACKUP DATABASE AdventureWorks 4 TO DISK= 'D:\MSSQL\Data ...

  3. pygame 笔记-9 图片旋转及边界反弹

    h5或flash中,可以直接对矢量对象,比如line, rectange旋转,但是pygame中,仅支持对image旋转,本以为这个是很简单的事情,但是发现还是有很多小猫腻的,记录一下: 先看一个错误 ...

  4. pygame 笔记-8 背景音乐&子弹音效

    游戏哪能没有音效?这节我们研究下如何加背景音乐,其实也很简单: # 加载背景音乐 pygame.mixer.music.load(music_base_path + "music.mp3&q ...

  5. pygame 笔记-7 生命值/血条处理

    通常游戏中的角色都有所谓的生命值,而且头顶上会有一个血条显示.生命值无非就是一个属性而已,很容易在Player.py类中增加,头顶上的血条其实就是绘制二个矩形,叠加在一起. 以上节的Player.py ...

  6. pygame 笔记-6 碰撞检测

    这一节学习碰撞检测,先看原理图: 2个矩形如果发生碰撞(即:图形有重叠区域),按上图的判断条件就能检测出来,如果是圆形,则稍微变通一下,用半径检测.如果是其它不规则图形,大多数游戏中,并不要求精确检测 ...

  7. pygame 笔记-5 模块化&加入敌人

    上一节,已经用OOP方法,把几个类抽象出来了,但是都集中在一个.py文件中,代码显得很冗长,这一节复用模块化的思想,把这个大文件拆分成几个小文件: 先把主角Player单独放到一个文件player.p ...

  8. pygame 笔记-4 代码封装&发射子弹

    继续之前的内容,随着游戏的内容越来越复杂,有必要把代码优化一下,可以参考OOP的做法,把人物类抽象出来,弄成一个单独的类,这们便于代码维护,同时我们给小人儿,加个发射子弹的功能,代码如下:(看上去略长 ...

  9. pygame 笔记-3 角色动画及背景的使用

    上二节,已经知道如何控制基本的运动了,但是只有一个很单调的方块,不太美观,本节学习如何加载背景图,以及角色的动画. 素材准备:(原自github) 角色动画的原理:动画都是一帧帧渲染的,比如向左走的动 ...

随机推荐

  1. bzoj4059

    题解: 还是一道不错的题目 首先它要求每个区间都满足要求,所以我们很容易想到将它映射到二维平面上 然后我们算出每个数的前驱以及后继li,ri 那么第一维是li-i,第二维是i-ri的区间就是合法的,同 ...

  2. 3.ELK 之elasticsearch CRUD

    名词介绍 index: type: document: 数据类型: 索引(index)创建示例 .   type的创建(7.x之后)将会去掉该内容,点我看为什么? 参考脚本: mapping使用 其他 ...

  3. HTTP.sys远程执行代码漏洞

    远程执行代码漏洞存在于 HTTP 协议堆栈 (HTTP.sys) 中,当 HTTP.sys 未正确分析经特殊设计的 HTTP 请求时会导致此漏洞. http://bbs.safedog.cn/thre ...

  4. spark批量写写数据到Hbase中(bulkload方式)

    1:为什么大批量数据集写入Hbase中,需要使用bulkload BulkLoad不会写WAL,也不会产生flush以及split. 如果我们大量调用PUT接口插入数据,可能会导致大量的GC操作.除了 ...

  5. Zabbix监控Low level discovery实时监控网站URL状态

    今天我们来聊一聊Low level discovery这个功能,我们为什么要用到loe level discovery这个功能呢? 很多时候,在使用zabbix监控一些东西,需要对类似于Itens进行 ...

  6. HTML5拖放牛刀小试

    <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content ...

  7. K线图

    1.程序 <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <titl ...

  8. java.io.File中字段的使用

    File.pathSeparator指的是分隔连续多个路径字符串的分隔符,例如:Java   -cp   test.jar;abc.jar   HelloWorld就是指“;” File.separa ...

  9. HDU 2289 Cup【二分】

    <题目链接> 题目大意: 一个圆台型的杯子,它的上底半径和下底半径已经给出,并且给出它的高度,问你,体积为V的水倒入这个杯子中,高度为多少. 解题分析: 就是简单的二分答案,二分枚举杯中水 ...

  10. PostgreSQL 调用存储过程返回结果集

    创建返回结果集类型的存储过程: CREATE OR REPLACE FUNCTION public.f_get_member_info( id integer, productname charact ...