如何将 "rect" 属性分配给 Pygame 中的 pygame.sprite.rect 矩形?
How do you assign a "rect" attribute to a pygame.sprite.rect rectangle in Pygame?
这个问题以前有人问过,但是他们回答的代码不适用于我。
我想检查我的游戏中两个矩形何时发生碰撞,对于圆圈,我在圆圈后面放了一个矩形(它是黑色的)。
但是,当我 运行 时,我收到一条错误消息,指出矩形需要具有 rect 属性。
这是我的代码:
clock = pygame.time.Clock()
pygame.init()
change = False
screen = pygame.display.set_mode((400, 300))
done = False
x = 100
y = 30
bound = False
while not done:
for event in pygame.event.get():
if event.type == pygame.QUIT:
done = True
elif event.type == pygame.KEYDOWN and event.key == pygame.K_f:
color = (255, 255, 255)
pygame.draw.rect(screen, color, (110, 30, 60, 60))
bound = True
elif event.type == pygame.KEYDOWN and event.key == pygame.K_z:
change = not change
if bound:
pressed = pygame.key.get_pressed()
if pressed[pygame.K_DOWN] or pressed[pygame.K_s]:
y += 5
elif pressed[pygame.K_RIGHT] or pressed[pygame.K_d]:
x += 5
elif pressed[pygame.K_LEFT] or pressed[pygame.K_a]:
x -= 5
elif pressed[pygame.K_UP] or pressed[pygame.K_w]:
y -= 5
elif change:
color2 = (0, 128, 86)
else:
color2 = (0, 128, 10)
screen.fill((0, 0, 0))
pygame.draw.rect(screen, color2, (x, y, 60, 60))
#pygame.draw.rect(screen, (255, 255, 255), (150, 30, 10, 60))
pygame.draw.rect(screen, (255, 255, 255), (x+ 65, y + 24, 20, 10))
else:
pressed = pygame.key.get_pressed()
if pressed[pygame.K_DOWN] or pressed[pygame.K_s]:
y += 5
elif pressed[pygame.K_RIGHT] or pressed[pygame.K_d]:
x += 5
elif pressed[pygame.K_LEFT] or pressed[pygame.K_a]:
x -= 5
elif pressed[pygame.K_UP] or pressed[pygame.K_w]:
y -= 5
elif change:
color2 = (0, 128, 86)
else:
color2 = (0, 128, 10)
screen.fill((0, 0, 0))
player = pygame.draw.rect(screen, color2, (x, y, 60, 60))
back = pygame.draw.rect(screen, (0, 0, 0), (210, 210, 40, 40))
gun1 = pygame.draw.circle(screen, (0, 0, 255), (250, 250), 40, 1)
pygame.draw.rect(screen, (255, 255, 255), (240, 245, 20, 10))
clock.tick(60)
pygame.display.flip()
有人可以给我代码,将 rect 属性分配给我的矩形吗?
谢谢!
操作pygame.sprite.collide_rect()
, pygame.sprite.spritecollide()
, pygame.sprite.groupcollide()
etc. are for the use with pygame.sprite.Sprite
objects and pygame.sprite.Group
个对象。
此操作使用 Sprite
对象的内部 .rect
属性来检测碰撞。
您既没有 Sprite
也没有 Group
,但是您有 pygame.Rect
个对象。
验证是否为 2 pygame.Rect
objects are colliding, you have to use pygame.Rect.colliderect()
。例如:
player = pygame.draw.rect(screen, color2, (x, y, 60, 60))
back = pygame.draw.rect(screen, (0, 0, 0), (210, 210, 40, 40))
gun1 = pygame.draw.circle(screen, (0, 0, 255), (250, 250), 40, 1)
if player.colliderect(back):
print("player collide back")
if player.colliderect(gun1):
print("player collide gun1")
这个问题以前有人问过,但是他们回答的代码不适用于我。
我想检查我的游戏中两个矩形何时发生碰撞,对于圆圈,我在圆圈后面放了一个矩形(它是黑色的)。
但是,当我 运行 时,我收到一条错误消息,指出矩形需要具有 rect 属性。
这是我的代码:
clock = pygame.time.Clock()
pygame.init()
change = False
screen = pygame.display.set_mode((400, 300))
done = False
x = 100
y = 30
bound = False
while not done:
for event in pygame.event.get():
if event.type == pygame.QUIT:
done = True
elif event.type == pygame.KEYDOWN and event.key == pygame.K_f:
color = (255, 255, 255)
pygame.draw.rect(screen, color, (110, 30, 60, 60))
bound = True
elif event.type == pygame.KEYDOWN and event.key == pygame.K_z:
change = not change
if bound:
pressed = pygame.key.get_pressed()
if pressed[pygame.K_DOWN] or pressed[pygame.K_s]:
y += 5
elif pressed[pygame.K_RIGHT] or pressed[pygame.K_d]:
x += 5
elif pressed[pygame.K_LEFT] or pressed[pygame.K_a]:
x -= 5
elif pressed[pygame.K_UP] or pressed[pygame.K_w]:
y -= 5
elif change:
color2 = (0, 128, 86)
else:
color2 = (0, 128, 10)
screen.fill((0, 0, 0))
pygame.draw.rect(screen, color2, (x, y, 60, 60))
#pygame.draw.rect(screen, (255, 255, 255), (150, 30, 10, 60))
pygame.draw.rect(screen, (255, 255, 255), (x+ 65, y + 24, 20, 10))
else:
pressed = pygame.key.get_pressed()
if pressed[pygame.K_DOWN] or pressed[pygame.K_s]:
y += 5
elif pressed[pygame.K_RIGHT] or pressed[pygame.K_d]:
x += 5
elif pressed[pygame.K_LEFT] or pressed[pygame.K_a]:
x -= 5
elif pressed[pygame.K_UP] or pressed[pygame.K_w]:
y -= 5
elif change:
color2 = (0, 128, 86)
else:
color2 = (0, 128, 10)
screen.fill((0, 0, 0))
player = pygame.draw.rect(screen, color2, (x, y, 60, 60))
back = pygame.draw.rect(screen, (0, 0, 0), (210, 210, 40, 40))
gun1 = pygame.draw.circle(screen, (0, 0, 255), (250, 250), 40, 1)
pygame.draw.rect(screen, (255, 255, 255), (240, 245, 20, 10))
clock.tick(60)
pygame.display.flip()
有人可以给我代码,将 rect 属性分配给我的矩形吗?
谢谢!
操作pygame.sprite.collide_rect()
, pygame.sprite.spritecollide()
, pygame.sprite.groupcollide()
etc. are for the use with pygame.sprite.Sprite
objects and pygame.sprite.Group
个对象。
此操作使用 Sprite
对象的内部 .rect
属性来检测碰撞。
您既没有 Sprite
也没有 Group
,但是您有 pygame.Rect
个对象。
验证是否为 2 pygame.Rect
objects are colliding, you have to use pygame.Rect.colliderect()
。例如:
player = pygame.draw.rect(screen, color2, (x, y, 60, 60))
back = pygame.draw.rect(screen, (0, 0, 0), (210, 210, 40, 40))
gun1 = pygame.draw.circle(screen, (0, 0, 255), (250, 250), 40, 1)
if player.colliderect(back):
print("player collide back")
if player.colliderect(gun1):
print("player collide gun1")