Pygame 使用对象和矩形进行碰撞检测

2023-12-14

是的,我正在问有关该程序的另一个问题:D

不管怎样,我目前有一个程序,可以在屏幕上创建两条线,它们之间有一个可以滚动的间隙。从这里,我显然需要查看两个物体是否发生碰撞。由于我只有一个精灵和一个矩形,我认为为它们创建两个类有点毫无意义和过分。但是,我只能找到与我显然不需要的课程相关的教程。所以,我的问题确实是: 是否可以测试标准图像和 Pygame 之间的碰撞rect?如果不是,我该如何转换图像、矩形或两个精灵来执行此操作。 (最好不使用类。)

注意:图像和矩形是通过以下方式创建的(如果有区别的话)

bird = pygame.image.load("bird.png").convert_alpha()
pipeTop = pygame.draw.rect(screen, (0,200,30), Rect((scrollx,0),(30,height)))
pipeBottom = pygame.draw.rect(screen, (0,200,30), Rect((scrollx,900),(30,-bheight)))

图像本身没有位置。您无法测试矩形与未放置在世界中的物体之间的碰撞。我建议创建一个 Bird 类和 Pipe 类,它们都是 pygame.Sprite 的子类。

Pygame 已经内置了碰撞检测。

一个简短的例子

bird = Bird()
pipes = pygame.Group()
pipes.add(pipeTop)
pipes.add(pipeBottom)

while True:    
    if pygame.sprite.spritecollide(bird,pipes):
        print "Game Over"

EDIT:

不要害怕课程,无论如何你迟早都会用到它们。 如果你真的不想使用精灵,你可以使用小鸟矩形和管道并调用collide_rect检查它们是否重叠。

EDIT2:

从 pygame 文档修改的 Bird 类示例

class Bird(pygame.sprite.Sprite):
    def __init__(self):
       pygame.sprite.Sprite.__init__(self)

       self.image = pygame.image.load("bird.png").convert_alpha()

       # Fetch the rectangle object that has the dimensions of the image
       # Update the position of this object by setting the values of rect.x and rect.y
       self.rect = self.image.get_rect()

然后,您可以添加诸如 move 之类的方法,这将利用重力将鸟向下移动。

这同样适用于Pipe但您可以创建一个空的 Surface,并用颜色填充它,而不是加载图像。

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

Pygame 使用对象和矩形进行碰撞检测 的相关文章

  • 尽管极其懒惰,但如何在 Python 中模拟 IMAP 服务器?

    我很好奇是否有一种简单的方法来模拟 IMAP 服务器 例如imaplib模块 在Python中 without做很多工作 是否有预先存在的解决方案 理想情况下 我可以连接到现有的 IMAP 服务器 进行转储 并让模拟服务器在真实的邮箱 电子
  • 如何在android上的python kivy中关闭应用程序后使服务继续工作

    我希望我的服务在关闭应用程序后继续工作 但我做不到 我听说我应该使用startForeground 但如何在Python中做到这一点呢 应用程序代码 from kivy app import App from kivy uix floatl
  • 如何打印没有类型的defaultdict变量?

    在下面的代码中 from collections import defaultdict confusion proba dict defaultdict float for i in xrange 10 confusion proba di
  • Python 多处理示例不起作用

    我正在尝试学习如何使用multiprocessing但我无法让它发挥作用 这是代码文档 http docs python org 2 library multiprocessing html from multiprocessing imp
  • 打破嵌套循环[重复]

    这个问题在这里已经有答案了 有没有比抛出异常更简单的方法来打破嵌套循环 在Perl https en wikipedia org wiki Perl 您可以为每个循环指定标签 并且至少继续一个外循环 for x in range 10 fo
  • Spark的distinct()函数是否仅对每个分区中的不同元组进行洗牌

    据我了解 distinct 哈希分区 RDD 来识别唯一键 但它是否针对仅移动每个分区的不同元组进行了优化 想象一个具有以下分区的 RDD 1 2 2 1 4 2 2 1 3 3 5 4 5 5 5 在此 RDD 上的不同键上 所有重复键
  • NameError:名称“urllib”未定义”

    CODE import networkx as net from urllib request import urlopen def read lj friends g name fetch the friend list from Liv
  • Abaqus 将曲面转化为集合

    我一直试图在模型中找到两个表面的中心 参见照片 但未能成功 它们是元素表面 面 查询中没有选项可以查找元素表面的中心 只能查找元素集的中心 找到节点集的中心也很好 但是我的节点集没有出现在工具 gt 查询 gt 质量属性选项中 而且我找不到
  • python 集合可以包含的值的数量是否有限制?

    我正在尝试使用 python 设置作为 mysql 表中 ids 的过滤器 python集存储了所有要过滤的id 现在大约有30000个 这个数字会随着时间的推移慢慢增长 我担心python集的最大容量 它可以包含的元素数量有限制吗 您最大
  • Geopandas 设置几何图形:MultiPolygon“等于 len 键和值”的 ValueError

    我有 2 个带有几何列的地理数据框 我将一些几何图形从 1 个复制到另一个 这对于多边形效果很好 但对于任何 有效 多多边形都会返回 ValueError 请指教如何解决这个问题 我不知道是否 如何 为什么应该更改 MultiPolygon
  • HTTPS 代理不适用于 Python 的 requests 模块

    我对 Python 还很陌生 我一直在使用他们的 requests 模块作为 PHP 的 cURL 库的替代品 我的代码如下 import requests import json import os import urllib impor
  • Python - 按月对日期进行分组

    这是一个简单的问题 起初我认为很简单而忽略了它 一个小时过去了 我不太确定 所以 我有一个Python列表datetime对象 我想用图表来表示它们 x 值是年份和月份 y 值是此列表中本月发生的日期对象的数量 也许一个例子可以更好地证明这
  • Numpy 优化

    我有一个根据条件分配值的函数 我的数据集大小通常在 30 50k 范围内 我不确定这是否是使用 numpy 的正确方法 但是当数字超过 5k 时 它会变得非常慢 有没有更好的方法让它更快 import numpy as np N 5000
  • 如何改变Python中特定打印字母的颜色?

    我正在尝试做一个简短的测验 并且想将错误答案显示为红色 欢迎来到我的测验 您想开始吗 是的 祝你好运 法国的首都是哪里 法国 随机答案不正确的答案 我正在尝试将其显示为红色 我的代码是 print Welcome to my Quiz be
  • Nuitka 未使用 nuitka --recurse-all hello.py [错误] 编译 exe

    我正在尝试通过 nuitka 创建一个简单的 exe 这样我就可以在我的笔记本电脑上运行它 而无需安装 Python 我在 Windows 10 上并使用 Anaconda Python 3 我输入 nuitka recurse all h
  • 如何从没有结尾的管道中读取 python 中的 stdin

    当管道来自 打开 时 不知道正确的名称 我无法从 python 中的标准输入或管道读取数据 文件 我有作为例子管道测试 py import sys import time k 0 try for line in sys stdin k k
  • glpk.LPX 向后兼容性?

    较新版本的glpk没有LPXapi 旧包需要它 我如何使用旧包 例如COBRA http opencobra sourceforge net openCOBRA Welcome html 与较新版本的glpk 注意COBRA适用于 MATL
  • 用于运行可执行文件的python多线程进程

    我正在尝试将一个在 Windows 上运行可执行文件并管理文本输出文件的 python 脚本升级到使用多线程进程的版本 以便我可以利用多个核心 我有四个独立版本的可执行文件 每个线程都知道要访问它们 这部分工作正常 我遇到问题的地方是当它们
  • Python:元类属性有时会覆盖类属性?

    下面代码的结果让我感到困惑 class MyClass type property def a self return 1 class MyObject object metaclass MyClass a 2 print MyObject
  • 改变字典的哈希函数

    按照此question https stackoverflow com questions 37100390 towards understanding dictionaries 我们知道两个不同的字典 dict 1 and dict 2例

随机推荐

  • Kotlin函数参数:Val不能重新赋值

    我用 Kotlin 写了红黑树 乐趣插入修正插入新元素后恢复平衡 z Node 是新元素 树平衡算法取自here 第 2 3 页 这problem是科特林吗不允许我重新分配 z to z parent and z parent parent
  • Android:CollapsingToolbarLayout 和 SearchView,文本重叠

    我对 CollapsingToolbarLayout 标题与 SearchView 文本重叠没有什么问题 当CollapsingToolbarLayout展开时 没有问题 但是当折叠时 文本会重叠 如何修复它 我尝试了托马斯的答案 但它有一
  • 当我使用对话框显示新页面时,它只能使用一次,并且始终在页面中显示相同的内容

    你好 这是我第一次使用对话框 这是我的代码 dialog dialog autoOpen false closeOnWscape true show blind width 800 buttons close function alert
  • 将 OpenMP 与 GCC 静态链接

    给出以下文件 print cpp include
  • Fortran 输出实数

    已经声明了一个变量 真实 4 因素 然后因子 2 25 我想输出2 25 尝试过F3 2 有什么帮助吗 WRITE lu09 9315 FACTOR 9315 FORMAT F4 2 Fortran 格式F3 2会输出最多的数字 99 但任
  • 当数组中给出级别时转换对象列表

    假设我有一个数组 它告诉我标签列表和一个值 我需要将它们添加到 JSON 对象中 怎么把它改成这样呢 所以基本上我有一个数组和一个值100 arr 1 Male 应该将其转换为对象 obj 1 Male 100 你可以使用reduceRig
  • 如何将字符串添加到 string[] 数组?没有 .Add 功能

    private string ColeccionDeCortes string Path DirectoryInfo X new DirectoryInfo Path FileInfo listaDeArchivos X GetFiles
  • 在 addClassRules 中添加组

    我该如何添加groups for require from group添加到addClassRules validator addClassRules group input require from group 1 group input
  • Rails 3.1 提交带有链接的 ajax (remote: true) 表单

    在 Rails 3 1 应用程序上使用 ajax 我需要能够使用链接而不是提交按钮提交 ajax 表单 使用远程 true 我需要对链接 或表单 做什么才能使其作为 ajax 提交而不是正常的表单提交 我尝试将 onclick java 添
  • 如何彻底删除gcloud?

    我是 mac 新手 我只是删除了 gcloud 文件夹 现在 当我打开命令行窗口时 我总是会看到下一个 bash Users myuser gcloud google cloud sdk completion bash inc 没有这样的文
  • C编程:scanf中的字符[重复]

    这个问题在这里已经有答案了 scanf 字符有问题 运行程序时不要让我输入字符 当我输入整数时程序会打印 printf 并转到最后一个 else include
  • 为什么 Spark 的 Word2Vec 返回向量?

    运行Spark 的 Word2Vec 示例 我意识到它接受一个字符串数组并给出一个向量 我的问题是 它不应该返回矩阵而不是向量吗 我期望每个输入单词有一个向量 但它返回一个向量周期 或者也许它应该接受字符串 而不是字符串数组 一个单词 作为
  • 如何在 PHP 应用程序内从另一个站点呈现 javascript?

    我想做的是从 PHP 应用程序内部的网页读取特定行 这是迄今为止我的实验设置
  • ASP 中的访问控制允许来源

    我有一个 DOM 文件 它调用另一个域上的 ASP 文件 不是 NET 我该如何写Access Control Allow Origin在ASP 中 Access Control Allow Origin是 PHP 的 但我找不到 ASP
  • oracle.jdbc.OracleDatabaseException: ORA-00972: 标识符太长

    这是我的实体类 Entity public class ProjectDetails Id private int projectId private String projectDescription private int langua
  • jQuery.extend 和 jQuery.fn.extend 之间的区别?

    我试图理解 jquery 插件语法 因为我想将两个插件合并到 一 信号灯还需要能够间隔停止或运行多次 反正 这个语法与以下相同吗 jQuery fn extend everyTime function interval label fn t
  • 自定义 SSL 处理在 Android 2.2 FroYo 上停止工作

    对于我的应用程序 Transdroid 我通过 HTTP 连接到远程服务器 也可以选择通过 HTTPS 安全连接 对于与 HttpClient 的这些 HTTPS 连接 我使用自定义 SSL 套接字工厂实现来确保自签名证书正常工作 基本上
  • VBA COM 互操作问题

    我有一些来自 MSDN 的示例代码 我正在尝试对其进行修改以供使用 但 VBA 编译器拒绝尖括号的内容 lt gt 我在模块中有以下代码 Imports System Imports System Runtime InteropServic
  • java上的rtsp流

    任何人都可以帮我提供有关如何使用 gstreamer 在 java 中实现 RTSP 流媒体服务器的教程 链接文本 RTSP建立过程Server 代码是用 C 编写的 但请查看我的客户端代码以了解如何使用 gstreamer java AP
  • Pygame 使用对象和矩形进行碰撞检测

    是的 我正在问有关该程序的另一个问题 D 不管怎样 我目前有一个程序 可以在屏幕上创建两条线 它们之间有一个可以滚动的间隙 从这里 我显然需要查看两个物体是否发生碰撞 由于我只有一个精灵和一个矩形 我认为为它们创建两个类有点毫无意义和过分