Python基础:第014课——弹跳的小球

这篇具有很好参考价值的文章主要介绍了Python基础:第014课——弹跳的小球。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

观看视频
本次课,我们将实现小球在碰到窗口的边缘时发生反弹,先来看一下图。
参考:pygame中的Rect对象
Python基础:第014课——弹跳的小球

示例1:让小球动起来

下面的代码,球没有移动的原因就是move()方法错误,move(x,y)方法:返回按给定偏移量移动后的新矩形。x和y参数可以是任何整数值(正数或负数)。而原来的Rect对象并没有移动,需要将图像绘制在新的Rect对象中,这样才能产生动画

import pygame, sys

pygame.init()

screen = pygame.display.set_mode((600,480))

pygame.display.set_caption("小小工坊")

ball = pygame.image.load('pygame/images/ball.gif')
ball_rect = ball.get_rect()

speed = 1
while True:

    for e in pygame.event.get():
        if e.type == pygame.QUIT:
            pygame.quit()
            sys.exit()
    
    ball_rect.move(speed, speed)
    screen.fill((0,0,255))
    screen.blit(ball,ball_rect)

    pygame.display.update()

因此,程序中ball_rect.move(speed, speed)这句应改成:ball_rect = ball_rect.move(speed, speed)

import pygame, sys

pygame.init()

screen = pygame.display.set_mode((600,480))

pygame.display.set_caption("小小工坊")

ball = pygame.image.load('pygame/images/ball.gif')
ball_rect = ball.get_rect()

speed = 1
while True:

    for e in pygame.event.get():
        if e.type == pygame.QUIT:
            pygame.quit()
            sys.exit()
    
    ball_rect = ball_rect.move(speed, speed)
    screen.fill((0,0,255))
    screen.blit(ball,ball_rect)

    pygame.display.update()

通过修改,球一闪而过,速度太快,这时,我们需要用到time模块,设定每秒钟游戏的刷新频率,因此,应该添加:

fclock = pygame.time.clock()
……
fclock.tick(60)

示例2:让小球反弹

Python基础:第014课——弹跳的小球
当小球碰到边缘的情况,就是绘制小球所在的Rect对象碰到边缘,有四种情况:

  • top < =0:竖直方向的速度变为负值
  • bottom > screenHeight: 竖直方向的速度变为正值
  • left <= 0 :水平方向的速度变为正值
  • right >= screenWidth:水平方向的速度变为负值

因此,程序需要改为:

import pygame, sys

pygame.init()

screen = pygame.display.set_mode((600,480))

pygame.display.set_caption("小小工坊")

ball = pygame.image.load('pygame/images/ball.gif')
ball_rect = ball.get_rect()

speed = 1

fclock = pygame.time.Clock()
while True:

    for e in pygame.event.get():
        if e.type == pygame.QUIT:
            pygame.quit()
            sys.exit()
    
    ball_rect = ball_rect.move(speed, speed)
    if ball_rect.right >= 600:
        speed = -1
        ball_rect.right = 600
    if ball_rect.left <= 0:
        speed = 1
        ball_rect.left = 0
        
    if ball_rect.bottom >= 480:
        speed = -1
        ball_rect.bottom = 480

    if ball_rect.top <= 0:
        speed = 1
        ball_rect.top = 0
    screen.fill((0,0,255))
    screen.blit(ball,ball_rect)

    pygame.display.update()
    fclock.tick(200)

但是此时,小球一直在一条对角线上来回运动,这是因为:不论在水平或竖直方向,只要超出屏幕的边界,speed的值就会改变,而speed是水平和竖直两个方向的速度。这时就要考虑用两个值分别表示水平和竖直方向上的速度,这时可以考虑用列表:speed = [1, 1]。这里能否用元组speed = (1, 1)呢?文章来源地址https://www.toymoban.com/news/detail-468418.html

import pygame, sys

pygame.init()

screen = pygame.display.set_mode((600,480))

pygame.display.set_caption("小小工坊")

ball = pygame.image.load('pygame/images/ball.gif')
ball_rect = ball.get_rect()

speed = [1,1]

fclock = pygame.time.Clock()
while True:

    for e in pygame.event.get():
        if e.type == pygame.QUIT:
            pygame.quit()
            sys.exit()
    
    ball_rect = ball_rect.move(speed[0], speed[1])
    if ball_rect.right >= 600:
        speed[0] = -1
        ball_rect.right = 600
    if ball_rect.left <= 0:
        speed[0] = 1
        ball_rect.left = 0

    if ball_rect.bottom >= 480:
        speed[1] = -1
        ball_rect.bottom = 480

    if ball_rect.top <= 0:
        speed[1] = 1
        ball_rect.top = 0
    screen.fill((0,0,255))
    screen.blit(ball,ball_rect)

    pygame.display.update()
    fclock.tick(200)

到了这里,关于Python基础:第014课——弹跳的小球的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 如何在微软Edge浏览器上一键观看高清视频?

    编者按:视频是当下最流行的媒体形式之一。但由于视频压缩、网络不稳定等原因,我们常常可以看到互联网上的很多视频其画面质量并不理想,尤其是在浏览器端,这极大地影响了观看体验。不过,近期微软 Edge 浏览器推出了一项新功能,一键就可以让浏览器中的视频变为

    2024年02月07日
    浏览(41)
  • 基于卡尔曼滤波的视频跟踪,基于卡尔曼滤波的运动小球跟踪

    完整代码和数据下载链接:基于卡尔曼滤波的视频跟踪,基于卡尔曼滤波的运动小球跟踪(代码完整,数据齐全)资源-CSDN文库 https://download.csdn.net/download/abc991835105/88738577 卡尔曼滤波原理 RBF的定义 RBF理论 易错及常见问题 RBF应用实例,基于rbf的空调功率预测 代码 结果分析

    2024年02月02日
    浏览(36)
  • 基于协同过滤算法的电影推荐系统(亮点:智能推荐、协同过滤算法、在线支付、视频观看)

    💗 博主介绍 :✌全网粉丝10W+,CSDN特邀作者、博客专家、CSDN新星计划导师、全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战✌💗 👇🏻 精彩专栏 推荐订阅 👇🏻 2023-2024年最值得选的微信小程序毕业设

    2024年02月08日
    浏览(50)
  • python制作跳跃的小球

    11.1.安装pygame库 pip install pygame 11.2.加载模块初始化 11.3.创建窗口 作用:创建游戏窗口 常见的内置方法: 方法 作用 pygame.dispaly. init() 初始化display pygame.dispaly. quit() 结束display模块 pygame.dispaly. get_init() 判断是否初始化 pygame.dispaly. get.surface() 获取当前surface对象 pygame.dispaly. flip

    2024年02月03日
    浏览(28)
  • 关于B站(bilibili)对未登录用户视频观看进行暂停和弹窗的分析与简单解决方案

    于近日的某次更新后,B站(bilibili)网页端出现了一个新功能:当用户没有登录时,将对每个视频间隔性地(目前的情况是视频开始播放后的1分钟)进行 自动暂停并弹出登录窗口 。不得不说,这个功能使得使用体验极差,每个视频都要经历暂停和弹窗实在是让人不爽。有些

    2024年02月02日
    浏览(30)
  • Qt推流程序(视频文件/视频流/摄像头/桌面转成流媒体rtmp+hls+webrtc)可在网页和播放器远程观看

    推流直播就是把采集阶段封包好的内容传输到服务器的过程。其实就是将现场的视频信号从手机端,电脑端,摄影机端打包传到服务器的过程。“推流”对网络要求比较高,如果网络不稳定,直播效果就会很差,观众观看直播时就会发生卡顿等现象,观看体验比较糟糕。主流

    2024年02月04日
    浏览(50)
  • windows系统-串口设备导致鼠标乱跳的问题

    最近在预装有windows7 SP1系统的工控机上,开发了一款modbus数据监听、处理的应用程序。主要功能就是监听485线上modbus通信数据,处理数据,并上报到中心平台,485数据通过USB串口转485信号转换模块获取。 调试过程中发现,工控机在接入被监听485信号的情况下启动,进入系统之

    2024年02月09日
    浏览(41)
  • 次时代摸鱼骚操作:人在办公室轻松观看家里电脑上的4k电影(移动端公网访问本地群辉存储视频文件)

    正文开始前给大家推荐个网站,前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站。 我同事老王最近刚换了新出的iPhone 15 Pro Max,直呼屏幕牛逼,太香了! 但他作为我司摸鱼比赛一等奖获得者,每天都潜心研究摸鱼技

    2024年02月08日
    浏览(33)
  • uniapp(全端兼容) - 最新详细禁用video视频组件的拖动快进快退功能,禁止视频播放组件video拖曳改变视频进度,uni-app如何不让视频播放器手动快进和快退(可保证用户完整观看完视频)

    在uniapp小程序/h5网页网站/安卓苹果app/nvue等(全平台完美兼容)开发中,详细实现Video视频组件禁止用户快进和快退,屏蔽禁用屏幕拖拽进行快退和快进功能(禁止用户拖动视频进度条),强制让用户从0-100完整观看完视频允许中途快进,适用于uni-app官方video视频组件,也支持

    2024年04月27日
    浏览(55)
  • python视频基础处理

    前言 本文主要介绍读取视频文件,保存视频帧图片;将帧图片合成为视频;读取视频文件,对视频帧图片进行心处理,将处理完的帧图片合成视频,以完成对视频的处理。 一、基本概念 视频是由一系列图像构成的,这一系列图像被称为 帧 ,帧是以固定的时间间隔从视频中

    2024年02月07日
    浏览(18)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包