Pygame 弹力球穿过地板下沉

2024-04-25

下面的代码会弹起一个球,但由于某种原因,球在完成弹跳后会穿过地面。有人知道为什么吗?代码的想法是一个球从左上角开始,然后下落并弹起,然后向上和向下移动,依此类推,直到它停止弹跳,但是当它停止弹跳时,它开始抖动并慢慢下沉到地面。我不知道为什么,我不明白。有人知道为什么吗?谢谢您的帮助

import pygame
pygame.init()

#All keyboard and mouse input will be handled by the following function
def handleEvents():
#This next line of code lets this function access the dx and dy
#variables without passing them to the function or returning them.
    global dx,dy
#Check for new events
    for event in pygame.event.get():
    #This if makes it so that clicking the X actually closes the game
    #weird that that wouldn't be default.
        if event.type == pygame.QUIT:
            pygame.quit(); exit()
    #Has any key been pressed?
        elif event.type == pygame.KEYDOWN:
        #Escape key also closes the game.
            if event.key == pygame.K_ESCAPE:
                pygame.quit(); exit()
            elif event.key == pygame.K_RIGHT or event.key == pygame.K_d:
                dx = dx + 5
            elif event.key == pygame.K_LEFT or event.key == pygame.K_a:
                dx = dx - 5
            elif event.key == pygame.K_UP or event.key == pygame.K_w:
                dy = dy - 5
            elif event.key == pygame.K_DOWN or event.key == pygame.K_s:
                dy = dy + 5

width = 1000
height = 600
size = (width, height)
black = (0, 0, 0) #r g b

screen = pygame.display.set_mode(size)
clock = pygame.time.Clock()

ball = pygame.image.load("ball.gif")
ballrect = ball.get_rect()

x = 0
y = 0
dx = 3
dy = 3

done = False
while not done:
    handleEvents()

    #Move the ball
    x = x + dx
    y = y + dy
    ballrect.topleft = (x,y)

    #PART A

    if ballrect.left < 0 or ballrect.right > width:
        dx = -dx
    if ballrect.top < 0 or ballrect.bottom > height:
        dy = -dy

'''If the ball is outside of the range delta y,
then delta y becomes the negative version of it, and the same goes
for delta x if it is outside the boundries of delta x
'''
#PART B

    dy = dy * 0.99
    dx = dx * 0.99
'''Could be useful if you want
the ball to stop moving after a certain amount of time,
or the opposite, it could make the ball slowly move a greater distance each frame'''

#PART C

    dy = dy + 0.3

'''dy slowly gets .3 added to itself each frame, making the bounce
smaller each time until eventually it stops fully'''



#Draw everything
    screen.fill(black)
    screen.blit(ball, ballrect)
    pygame.display.flip()

#Delay to get 30 fps
    clock.tick(30)

pygame.quit()

由于球的下落速度大于 1 像素,因此您必须确保球不会落到窗口下边缘以下。
您需要将球的底部约束到窗口的底部:

done = False
while not done:
    # [...]

    x = x + dx
    y = y + dy
    ballrect.topleft = (x,y)

    #PART A

    if ballrect.left < 0 or ballrect.right > width:
        dx = -dx
    if ballrect.top < 0:
        dy = -dy
    if ballrect.bottom > height:
        ballrect.bottom = height                       # <---
        y = ballrect.top                               # <---
        dy = -dy

    # [...]
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Pygame 弹力球穿过地板下沉 的相关文章

  • Python串口通信

    我正在开发一个 Arduino 项目 由于内存限制 我将其与 Python 脚本连接起来 在Python方面 我有一个二维矩阵 其中包含各自的x y坐标值 并且在此列表中有26000个坐标对 因此 为了向大家澄清数据结构 pathlist
  • mod_wsgi 下的 psp(python 服务器页面)代码?

    有没有办法在 apache mod wsgi 下运行 psp python 服务器页面 代码 虽然我们正在转向基于 wsgi 的新框架 但我们仍然有一些用 psp 编写的遗留代码 这些代码在 mod python 下运行 我们希望能够在托管
  • 如何解决 Python 'Pyzbar' 库的导入错误?

    我刚刚开始熟悉 Pyzbar 库 但是当使用decode方法我得到一个错误 这是代码 import cv2 import numpy as np import pyzbar code image cv2 imread C Users Ace
  • Python,将CSV文件转换为SQL表

    我有一个没有标题的 CSV 文件 并尝试从文件中的某些列创建 SQL 表 我尝试了这里给出的解决方案 使用 Python 将 CSV 文件导入 sqlite3 数据库表 https stackoverflow com questions 2
  • python 2.7 字符 \u2013 [重复]

    这个问题在这里已经有答案了 我有以下代码 coding utf 8 print u William Burges 1827 81 was an English architect and designer 当我尝试从cmd运行它时 我收到以
  • pyqt5调用url时处于无响应状态

    我刚刚在 pyqt 中实现了登录 但在调用 url 和获取响应之间 qt 窗口显示无响应状态 谁能建议我如何避免不响应状态 code class Login QDialog def init self height width parent
  • 使用另一个索引数组正确索引多维 Numpy 数组

    我正在尝试索引多维数组P与另一个数组indices 它指定我想要沿最后一个轴的哪个元素 如下所示 import numpy as np M N 20 10 P np random rand M N 2 9 index into the la
  • 如何动态构造方法?

    我设计了一个类 它非常标准 具有一些方法属性 class foo def f1 self print f1 def f2 self print f2 def fn self print fn 现在我想创建一个包含一组 foo 实例的类 cl
  • 使用 PyQt4 在 QWidget 上进行 eventFilter

    我有一个 QMainWindow 其中包含DrawingPointsWidget 该小部件随机绘制红点 我通过使用以下命令为 MouseHovering 事件安装事件过滤器 在 QMainWindow 的状态栏中显示鼠标坐标self ins
  • 用python计算网页大小

    我将如何使用 Python 计算网页 url 的大小 我尝试了 urllib2 并获取内容长度标头 但它不存在 import urllib2 url http www google com r urllib2 urlopen url Not
  • 有效地减去不同形状的 numpy 数组

    使用 numpy 出色的广播规则 您可以减去形状 3 数组v来自形状 5 3 数组X with X v 结果是一个形状 5 3 数组 其中每一行i是有区别的X i v 有没有办法减去形状 n 3 数组w from X使得每一行w从整个数组中
  • Requests-html 导致 OSError: [Errno 8] 调用 html.render() 时执行格式错误

    我正在使用 requests html 并尝试渲染功能 但收效甚微 当我使用 python3 8 运行这个脚本时 usr bin python3 from requests html import HTML file scrape temp
  • 您忽略了哪些 PEP 8 准则,哪些是您坚持的? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 多年来 我编写的 Python 越多 我就越发现自己同意大多数准则 尽管我出于自己的原因始终有意地违反了一些准则 我很想知道 PEP 8 也可能
  • 如何将填充轮廓投影到 3D 曲面图上

    我只是想在 3D 中绘制一个表面及其轮廓 就像this http matplotlib org examples mplot3d contourf3d demo2 html例子 这是我用来执行此操作的代码 import matplotlib
  • 在 Python 中删除表达式树及其每个子表达式树中第一个元素周围的括号

    目标是实现简化操作 删除表达式树及其每个子表达式树中第一个元素周围的括号 其中表达式作为括在各个括号中的字符串输入给出 这必须适用于任意数量的括号 例如 12 3 45 6 gt 123 45 6 删除 12 周围的括号 然后删除 45 周
  • 带日志图的 Type 1 字体

    我正在尝试使用 Matplotlib 图表作为相机就绪的一部分 提交 出版社要求使用Type 1字体 仅有的 我发现 PDF 后端很乐意输出 Type 1 字体 具有线性 Y 轴的简单图形 但输出 Type 3 字体 对数 Y 轴 使用对数
  • Python 用 lambda 函数封闭作用域变量

    我写了这个简单的代码 def makelist L for i in range 5 L append lambda x i x return L 好的 现在我打电话 mylist makelist 因为稍后调用嵌套函数时会查找封闭范围变量
  • Seaborn 分组条形图,使用总值而不是平均值

    我有一个关于如何组织数据以使用 seaborn 制作条形图的问题 我的数据输入如下所示 influencer platform reach person a instagram 10000 person b instagram 5000 p
  • 从tensorflow 2.0 beta中的tf.data.Dataset检索下一个元素

    在tensorflow 2 0 beta之前 要从tf data Dataset中检索第一个元素 我们可以使用迭代器 如下所示 usr bin python import tensorflow as tf train dataset tf
  • 使用按钮从 Django 项目根下载文件

    So this is the webpage I m creating atm with Django 1 8 希望用户能够将数据导出为 csv 当用户 在框中写下 Reddit 子版块名称 按下 获取数据 按钮 会发生什么 它创建了一个

随机推荐

  • 在 FragmentManager 上调用 popBackStack 时的 customAnimation

    在我的活动中 通过触摸按钮 我可以使用自定义动画将当前片段替换为新片段 如本例所示 Override public boolean onOptionsItemSelected MenuItem item Handle presses on
  • SATA 驱动器的硬盘 ID

    我正在为我的软件使用硬盘 ID 来检查真实用户是否正在使用该软件 对于 IDE 类型硬盘 我使用过程 GetIdeSerialNumber 获取 id 但如果是 SATA 驱动器 则 ID 为空 然后 对于 SATA 驱动器 我使用卷 ID
  • 了解荷兰国旗计划

    我正在读荷兰国旗问题 http en wikipedia org wiki Dutch national flag problem 但无法理解什么low and high参数在threeWayPartitionC 实现中的函数 如果我假设它
  • VBA Tab 键将实际的 Tab 值放入文本框中,而不是导航到下一个控件

    我有一个包含文本框的 VBA 表单 如果重要的话 在 Excel 中 有三次 我发现自己按 Tab 键导航到下一个控件 但实际的 TAB 却被放入文本框中 该形态通常会发挥应有的作用 但令我担心的是 这个小妖怪偶尔会出现 它已显示在两台不同
  • 获取 jQuery 中的“translateX”位置

    此代码设置 translateX 位置 var pos 500px slide css webkit transform translateX pos px 但是 以下代码没有获取translateX位置 var currTrans sli
  • 将 D3 svg 保存为高质量图像

    有没有办法将 D3 SVG 图像保存为高质量图像 如果是的话请解释一下 截至目前 我正在使用以下代码将 svg 保存为图像 但我得到的图像质量不高 var canvas1 document createElement canvas canv
  • 如何使用 matplotlib 绘制与比例无关的箭头

    我使用 matplotlib 在 python 中绘制了一条船的轨迹图 如下所示 现在我想添加一些箭头 例如风向 真实航向等 但是 无论绘图处于哪个缩放级别 我都希望箭头具有相同的大小 我尝试了 matplotlib pyplot arro
  • 在asp.net MVC中不使用LabelFor Helper获取DisplayName属性

    检索模型中项目的显示名称属性的最佳方法是什么 我看到很多人使用 LabelFor 助手来处理所有事情 但如果我只想列出数据 则标签不合适 如果我只想将其打印出来 比如说一个段落 是否有一种简单的方法可以获取名称属性 p p p 显然 为了避
  • 从 Xcode 分发时分析应用程序版本时出现什么错误?

    我想分发应用程序 但收到错误消息 我不知道原因 我使用 Xcode 版本 13 0 13A233 遇到错误 Error Analyzing App Version Build number request failed with error
  • 适用于 Hotmail、Gmail 和 Yahoo 的 PHP API? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 如何在 C# 中调整图像大小并保持宽高比

    我需要知道一种方法来调整图像大小以适合盒子 而不会使图像拉伸太多 该框已设置宽度和高度 我希望图像尽可能多地填充框 但保持其原始的纵横比 calculate the ratio double dbl double image Width d
  • cronjob 上的 PHP 错误,在提示时工作正常

    我正在 cronjob 上运行以下脚本 cd etc parselog php run all php gt dev null 并收到以下错误 05 May 2009 20 30 12 PHP Warning PHP Startup Una
  • 如何仅使用 CSS 制作图像轮播?

    我正在寻找制作一个图像轮播 用户可以通过单击箭头在图像之间切换 例如 但是 我只能使用 HTML 和 CSS 不能使用 JavaScript 因此也不能使用 jQuery 我只需要基本设置 平滑过渡等不是必需的 我怎样才能做到这一点 这很容
  • 无效参数:隔离消息中的非法参数:(对象是aReceivePort)

    我不确定我在这段代码中是否做错了什么 但我在生成新隔离时显然传递了 SendPort 但是当我调用时 Infrastructure instance initialize 我收到以下异常 Invalid argument s Illegal
  • int q = {1,2};特殊的初始化列表

    我遇到了下面的初始化 可以看出VS2012 显示一个错误 抱怨初始化程序太多 在海湾合作委员会看来 返回第一个元素作为值 为什么 GCC 支持这种特殊的初始化 include
  • Git 日志仅获取特定分支的提交

    我想列出仅属于特定分支的所有提交 通过以下内容 它列出了来自分支的所有提交 也列出了来自父级 主 的所有提交 git log mybranch 我发现的另一个选项是排除 master 可到达的提交并给我我想要的东西 但我想避免需要知道其他分
  • 如何交换“NSMutableDictionary”键和值?

    我有一个NSMutableDictionary我想交换值和键 即 交换值后成为键 并且其对应的键成为值 所有键和值都是唯一的 寻找就地解决方案 因为尺寸非常大 此外 键和值是NSString物体 NSMutableDictionary d
  • C# 中“dynamic”和“object”关键字有什么区别? [复制]

    这个问题在这里已经有答案了 谁能简单解释一下 C 中 dynamic 和 object 关键字之间的区别 object 让我们先快速浏览一下 object 关键字 我不会谈论太多 因为它从 C 1 0 就已经存在了 该关键字只不过是 Sys
  • 如何检查单个精灵帧期间的重叠情况?并在玩家与帧重叠的每个循环中仅从玩家生命值中减去 1?

    我有一个尖峰精灵 其循环中有 4 个帧 当玩家与尖峰精灵的第三帧重叠时 我想从健康变量中减去 1 目前 on 函数无法正确加载 我的游戏可以运行 但重叠功能根本无法运行 我编辑了收到的代码 并删除了我认为不需要的方面 测试了原始代码示例以检
  • Pygame 弹力球穿过地板下沉

    下面的代码会弹起一个球 但由于某种原因 球在完成弹跳后会穿过地面 有人知道为什么吗 代码的想法是一个球从左上角开始 然后下落并弹起 然后向上和向下移动 依此类推 直到它停止弹跳 但是当它停止弹跳时 它开始抖动并慢慢下沉到地面 我不知道为什么