Pygame 矩形碰撞

2023-12-01

我正在用 Python 在 Pygame 中创建一个 Pong 游戏(显然),并且是 Pygame 的新手,所以希望有人帮助研究当球接触球拍时的物理原理,它会反转速度并朝相反的方向移动。到目前为止一切正常,但是当球到达球拍时,它会直接穿过球拍并且不会改变方向。我已经解决了这个问题,以便球拍不会离开屏幕,并且球在遇到墙壁时会改变方向,但当球遇到球拍时不会改变方向。任何帮助或提示将不胜感激。

我的桨课:

class Paddle:    
    def __init__(self, x, y):    
        self.x = x
        self.y = y
        self.height = 40
        self.width = 10

    def draw(self, canvas):
         pygame.draw.rect(canvas, pygame.Color(0,0,255),(self.x,self.y,self.width,self.height))
    def contains(self, ptX, ptY):
        return self.x < ptX < self.x + self.width & self.y < ptY < self.y + self.height
    def overlaps(self, otherRectangle):
        return otherRectangle.colliderect(Rect(self.x,self.y,self.height, self.width))

我的球课

class Ball:
    def __init__(self, x, y):    
        #position of ball
        self.x = x
        self.y = y

        #speed of ball
        self.dx = 5
        self.dy = 5

        self.height = 10
        self.width = 10

    def draw(self, canvas):
        pygame.draw.rect(canvas, pygame.Color(0,255,0), (self.x,self.y,self.width,self.height))

    def reset(self):
        self.x = 320
        self.y = 240

        self.dx = -self.dx
        self.dy = 5

我的目标是当球接触球拍或反弹(重叠点)时使球的速度反转(负速度)。


您拥有的代码可能有点过多。让我们做一些更简单的事情。在你的draw函数(在两个Ball & Paddle),继续让你的行的开头看起来像这样:

self.rect = pygame.draw.rect...

然后您可以使用碰撞直角功能:

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

Pygame 矩形碰撞 的相关文章

随机推荐

  • PHP fork 进程 - 在父级中获取子级输出

    我想实现以下目标 初始化一个数组 子进程向数组添加一些元素 父进程向数组添加一些元素 最后在退出之前 打印所有元素 以下是我写的代码 然而 它只打印一个值 Put by parent 有人可以解释一下这种行为并建议正确的代码吗 问候 J P
  • Android Studio 中应用程序安装失败

    昨天我的应用程序运行完美Android Studio但是今天当我开始开发我的应用程序并运行它时 我不断收到错误消息 安装失败 并显示消息无法建立会话 Screen 单击时OK收到错误消息 会话 app 安装 APK 时出错 并且设备中不存在
  • WooCommerce:从匹配属性获取产品变体 ID

    如何从自定义产品循环中获取产品变体 ID 我有变异属性 例如 pa color gt red pa size gt large 要匹配的属性集是 attribute pa color gt blue attribute pa size gt
  • 可以阻止 XCode 在调用“XCUIApplication().terminate()”后调用调试器

    我正在使用 UITest 来测试 Objective C 应用程序 并使用 swift 进行测试 XCode 7 3 SIM 9 3 每个测试用例都会调用 XCUIApplication launch 它通过发送 SIGKILL 来终止任何
  • 位图到 NinePatch 到新缩放位图

    我的问题是这样的 我需要创建一个使用 NinePatch 创建的重新缩放的位图 我当前的系统从 NinePatch 文件创建位图 然后将其输入到 NinePatch 或 NinePatchDrawable 中 然后我需要调整它的大小并输出到
  • 判断 JS-ASP 中是否存在 URL 参数

    我正在编辑其他人的代码 用 ASP 的服务器端 JS 编写 并且遇到了一个可能有一个非常简单的解决方案的问题 我从 URL 参数输出一些代码 如下所示 问题是 如果参数不存在 我需要做其他事情 所以我尝试 问题是if似乎从来没有评价过tru
  • 创建表时的 SQL 整数范围

    我试图在一个创建语句中为我的 INT 提供一系列可能的值 即 CREATE TABLE Site SiteID INT 1 4 UserID INT UNSIGNED Not Null Name varchar 128 Unique Not
  • 当构建中没有定义默认值时,在命令行上设置设置值?

    我正在编写一个需要特定设置的插件 configUrl 如果我在我的中指定该设置build conf它看起来像这样 MyPlugin configUrl http 然后我可以使用命令行来执行此操作 sbt set MyPlugin confi
  • 包含值的 Firebase 查询

    我正在尝试查询 firebase 上的数据以查找其值包含字符串一部分的子项 因此 假设值是 apple 如果我搜索 app 我会返回该记录 我意识到有人问过这个问题 但我读过的答案都表明 Firebase 将集成此功能 几乎 3 年后 我似
  • 由于在缓存中未找到令牌,无法以静默方式获取令牌。调用AcquireToken方法

    我使用这个代码示例 https github com Azure Samples active directory dotnet graphapi web 我知道这个代码示例正在使用客户端库 但是如果我想直接使用 api 调用执行查询 使用
  • 我正在使用 Twilio android SDK,当我单击挂断按钮时总是出现错误?拨号后无法断开呼叫?

    我已经成功集成了适用于 Android 的 Twilio SDK 但是当我尝试使用它进行调用时 它没有连接并在 logcat 中显示错误消息 我收到以下错误 1 Failed to hangup call due to error code
  • 如何正确舍入和格式化小数? [复制]

    这个问题在这里已经有答案了 可能的重复 c 如何将小数值四舍五入到小数点后两位 用于页面上的输出 我正在尝试让小数显示为小数点后四位 数据库将我的数字四舍五入到小数点后 4 位 但它返回尾随 0 的数字 由于字段的小数精度 所以类似于 9
  • 将for循环转换为python3中的递归函数

    是否可以转换以下循环 c 0 for a in find c 1 return c 其中 find 是一个类似的列表 a b c d 到使用递归的函数不使用外部库 def count ls if not ls empty return 0
  • 我什么时候应该在导入中使用括号

    我有两个文件 第一个是 todoHelper js it has export const addTodo list item gt list item 稍后我想用addTodo在另一个文件中 我只是这样做import addTodo fr
  • 是否有 JSR-303(bean 验证)的实现可用?

    我知道有非标准框架 例如 commons validator 和 hibernate validator 我想知道是否有人知道官方标准的实施 现在有 2 个兼容的实现 Apache Bean 验证 原 agimatec 休眠验证器 您可以在
  • 删除带有 的 并创建子标题

    我正在开发一个应用程序 该应用程序从我无法控制的服务器读取数据 但我需要将此表上的前端设置为与其他表类似 桌子看起来像这样 table tr td width 30 Date td td width 40 Description td td
  • 为什么 WCF 返回 myObject[] 而不是像我期望的那样返回 List

    我正在从 WCF 方法返回一个列表 在我的客户端代码中 它的返回类型显示为 MyObject 我必须使用 MyObject IList 或 IEnumerable WCFClient myClient new WCFClient MyObj
  • 在浏览器调整大小时将 Google 地图 (V3) 居中(响应式)

    我的页面中有一个 Google 地图 V3 页面宽度为 100 中间有一个标记 当我调整浏览器窗口的宽度时 我希望地图保持居中 响应式 现在地图只是停留在页面的左侧并且变得更小 更新 感谢邓肯 使其完全按照描述工作 这是最终的代码 var
  • 添加注释后,ITextsharp 获取“至少一个签名需要验证”

    我想使用 ITextsharp 将注释自由文本添加到签名 PDF 中 将注释添加到 PDF 并在 adobe reader 中打开后 它将显示消息 至少有一个签 名需要验证 如果我使用 adobe reader 将注释添加到签名 PDF 中
  • Pygame 矩形碰撞

    我正在用 Python 在 Pygame 中创建一个 Pong 游戏 显然 并且是 Pygame 的新手 所以希望有人帮助研究当球接触球拍时的物理原理 它会反转速度并朝相反的方向移动 到目前为止一切正常 但是当球到达球拍时 它会直接穿过球拍