我制作了一个基本游戏,我有一个表面,每当我点击表面时,它会向右移动5个像素。该程序在没有checkCollide(事件)功能的情况下工作得很好,但是当我把它放在那个条件下它没有移动时。有什么问题?
我的代码到现在为止
end_session
谢谢
答案 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
索引)。现在我们可以移动这个rect,如果用户点击它(在示例中我将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.