如果这个问题是重复的,我很抱歉,但我已经在这个网站上跟踪了很多页面,试图找到一个答案,但我还没有找到一个可行的答案。我使用过的一些页面包括:
PyGame鼠标点击检测
自己找不到rect?
如何碰撞。pygame中的rect工作
这可能是我缺乏编码理解,如果是这样,我道歉。然而,我发现最“有帮助”的页面是第一个链接。用树懒的第一个回答,这似乎很简单,也是我能做的事情。一旦他的方法不起作用,我试着在YouTube和其他网站上搜索更多。我也找不到答案。
我只想在点击角色时简单地打印“点击”。这是我的代码。
import pygame
size = (700,500)
screen = pygame.display.set_mode(size)
done = False
clock = pygame.time.Clock()
itunes = pygame.image.load('itunes.png')
screen.blit(itunes,(200,200))
sprites = [itunes]
while not done:
for event in pygame.event.get():
if event.type == pygame.MOUSEBUTTONDOWN:
pos = pygame.mouse.get_pos()
clicked_sprites = [s for s in sprites if s.rect.collidepoint(pos)]
for i in clicked_sprites:
print('clicked sprite')
pygame.display.flip()
clock.tick(60)
我对Python语言了解很少,但我发现自己对编写同样的基于文本的程序感到厌烦,我想继续学习。
编辑:对不起,我应该说明我犯了什么错误。我得到:AttributeError:“pygame。“曲面”对象没有属性“rect”
编辑:在屏幕上绘制图像有困难
import pygame
size = (700,500)
screen = pygame.display.set_mode(size)
done = False
clock = pygame.time.Clock()
white = (0,0,0)
image = 'itunes.png'
class Thing(pygame.sprite.Sprite):
def __init__(self, image, x, y):
self.image = pygame.image.load('itunes.png')
self.x = x
self.y = y
@property
def rect(self):
return self.image.get_rect(topleft=(self.x, self.y))
itunes = Thing(image,200,200)
SpriteGroup = pygame.sprite.Group()
SpriteGroup.add(itunes)
while not done:
for event in pygame.event.get():
if event.type == pygame.MOUSEBUTTONDOWN:
pos = pygame.mouse.get_pos()
clicked_sprites = [s for s in SpriteGroup if s.rect.collidepoint(pos)]
for i in clicked_sprites:
print('clicked sprite')
screen.fill((0, 0, 0))
SpriteGroup.draw(screen)
pygame.display.flip()
clock.tick(60)
让我们看看你的代码做什么。
现在我们如何知道精灵列表中对象的位置?答案是我们没有。没有关于物体在表面本身的位置的信息。
要解决这个问题,您可以创建自己的Sprite类,其中包括一个rect
和一个surface,或者最好使用pygame。(传说中的)精灵Sprite
已包含rect。
图像是pygame。曲面
对象,并且它们没有作为属性的rect
。但是,可以通过调用SurfaceObject为该曲面对象获取一个。get_rect()
。这将创建一个pygame。Rect
表示曲面尺寸(如果不是其位置)的对象。
根据对象创建新rect
或根据其在窗口中的位置修改它的频率,您可以子类pygame.sprite.Sprite
并使用属性在其正确位置检索Rect。例如:
class Thing(pygame.sprite.Sprite):
def __init__(self, image, x, y):
super(Thing, self).__init__() #don't forget to do this!! (like I did :D, haha)
self.image = pygame.image.load(image)
self.x = x
self.y = y
@property
def rect(self):
return self.image.get_rect(topleft=(self.x, self.y))
曲面。get_rect()
调用采用关键字参数,允许您在创建对象时设置对象的属性。通过这种方式,它基本上是一个用于:
new_rect = self.image.get_rect()
new_rect.x = self.x
new_rect.y = self.y
return new_rect
整个过程将返回一个在窗口中正确位置的rect,这样就可以使用它进行碰撞检测,或者只是查看是否是如示例中所示单击的对象。
这种方法的另一个结果(使用rect
的属性)是它使对象与pygame很好地工作。(传说中的)精灵组draw()
方法,该方法通过点选对象的
对象来绘制该
组中的所有
和Sprite
对象。图像obj。rect属性。
因此,您可以通过将
精灵
从列表
转换为精灵来利用这一点。组对象,并对代码进行以下更改:
SpriteGroup = pygame.sprite.Group() #use these for working with Sprite objects
SpriteGroup.add(itunes) #add itunes to sprites Group
while not done:
for event in pygame.event.get():
if event.type == pygame.MOUSEBUTTONDOWN:
pos = pygame.mouse.get_pos()
clicked_sprites = [s for s in sprites if s.rect.collidepoint(pos)]
for i in clicked_sprites:
print('clicked sprite')
screen.fill((0, 0, 0)) #wipes the screen
SpriteGroup.draw(screen) #draws every Sprite object in this Group
pygame.display.flip()
clock.tick(60)
我在PyGame中创建了两个简单的精灵,其中一个是雨伞,另一个是雨滴。雨滴被添加到一个名为< code>all_sprites的sprite组中。伞精灵有自己的组,名为< code>Umbrella_sprite 雨滴从屏幕顶部“落下”,如果其中一个碰到雨伞/与雨伞碰撞..雨滴应该被删除了。但是除了特定雨滴之外,所有其他雨滴都受此影响。
我一直在学习一些pygame教程,并且基于这些教程开发了自己的代码。具体如下: 所以我想出了如何让我的家伙跳跃,但是我已经在天空中放置了一个块并试图这样做: 试图让角色停止跳跃。有没有一个内置的函数来测试这一点,或者有没有一个适合我的方法。顺便说一下,这是行不通的,我似乎也不知道该怎么做。非常感谢任何帮助:)
我正在用Python pygame制作一个游戏,并制作了一个移动的背景,一个作为玩家的跳跃精灵和生成障碍物。现在我正在研究玩家和障碍物之间的碰撞,并编写了一些代码,但最终出现了错误: 我不知道,为什么那个类不是精灵,也不知道如何把它变成精灵。我希望修复这个错误后,碰撞工程。 播放器图像1 图像 2 背景图片3
我正在与Pygame一起练习,试图学习类,对象等的一些基本用法。 现在,在http://programarcadegames.com/的帮助下,我正在制作一个基本的平台 我有一个精灵播放器和精灵平台。这些平台也可以是移动平台,它应该在碰撞时移动玩家,但是当玩家移动到其他平台时,会发生一些奇怪的传送,我现在没有看到问题。 基本上,当被推时,玩家在逻辑上没有被移动(至少对我来说是这样)。 非常感谢任何
对于我的pyplay塔防御计划,我试图弄清楚如何实现与地图上已经放置的其他塔的碰撞。 放置过程将创建一个48x48预览精灵,当它在游戏屏幕上时,该精灵将在玩家鼠标上的网格中移动。塔精灵保存在名为的组中。我有这段代码来检查精灵是否与某些地形瓷砖和塔精灵发生碰撞(这在精灵更新功能中): 循环前进部分是为了检查预览精灵是否与任何塔精灵矩形碰撞。如果是,它将变量设置为true或其他,False。 然后程序
问题内容: 在pygame中,有没有一种方法来寻找某一方之间的碰撞 一个精灵和另一个精灵的特殊一面?例如,如果 精灵A的顶部与精灵B的底部碰撞,返回True。 我肯定有办法做到这一点,但我找不到任何特别的方法 在文档中。 谢谢! 问题答案: 在PyGame中没有函数来获取侧面碰撞。 但你可以试着用 pygame.Rect.CollipePoint公司 测试是否,,, ,,,, 在里面 (pygam