Pygame矩形和鼠标pos Collidepoint无法正常工作

时间:2017-05-11 21:15:22

标签: python python-2.7 pygame

我制作了一个基本游戏,我有一个表面,每当我点击表面时,它会向右移动5个像素。该程序在没有checkCollide(事件)功能的情况下工作得很好,但是当我把它放在那个条件下它没有移动时。有什么问题?

我的代码到现在为止

end_session

谢谢

2 个答案:

答案 0 :(得分:1)

检查函数的这些行中的逻辑:

x = P1[0][0].get_rect()
if x.collidepoint(a,b):
    return True
return False

你的代码取决于这一点:

a = checkCollide(event)
if a:
    DISPLAYSURF.fill(WHITE)

所以你永远不会评价这件事是真的。

答案 1 :(得分:1)

我有一些提示给你。首先将rect存储在P1列表中(它仅包含以下示例中的图像和rect,但也许您还可以向其添加statp1_1索引)。现在我们可以移动这个rec​​t,如果用户点击它(在示例中我将topleft属性设置为下一个点)。阅读评论以获取更多提示。您需要解决的一件事是在statp1_1索引太大时阻止游戏崩溃。

import sys
import pygame


pygame.init()

DISPLAYSURF = pygame.display.set_mode((300, 300))

WHITE = (255, 255, 255)
# Don't load images in your while loop, otherwise they have to
# be loaded again and again from your hard drive.
# Also, convert loaded images to improve the performance.
P1_IMAGE = pygame.image.load('PAzul.png').convert()  # or .convert_alpha()

# Look up `list comprehension` if you don't know what this is.
CP1 = [(150+x, 150) for x in range(0, 41, 5)]

statp1_1 = 0
# Now P1 just contains the image and the rect which stores the position.
P1 = [P1_IMAGE, P1_IMAGE.get_rect(topleft=CP1[statp1_1])]

clock = pygame.time.Clock()  # Use this clock to limit the frame rate.

while True:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            pygame.quit()
            sys.exit()
        if event.type == pygame.MOUSEBUTTONUP:
            if P1[1].collidepoint(event.pos):
                print('clicked')
                statp1_1 += 1
                # Set the rect.topleft attribute to CP1[statp1_1].
                P1[1].topleft = CP1[statp1_1]

    DISPLAYSURF.fill(WHITE)
    DISPLAYSURF.blit(P1[0], P1[1])  # Blit image at rect.topleft.

    pygame.display.update()
    clock.tick(30)  # Limit frame rate to 30 fps.