我的代码没有出现任何错误,但它的行为并不像我期望的那样。
问题在于:
if bomb_rect.colliderect(pacman_rect)==True:
print("hello")
print("hello")
只应在两个矩形碰撞时执行,但无论何时都会执行。我不确定我忽略了什么。
编辑: 对困惑感到抱歉。我道歉,让我再解释一下,我有两张进口图片,一张是炸弹,一张是吃豆子。当两张照片发生碰撞时,"你好"将被打印。错误的来源不是bomb_rect.colliderect(pacman_rect),而是设置图像的位置。炸弹的坐标是随机设置的。和Pacman将出现在(0,0)。然而,当我移动Pacman时,我发现即使炸弹图像设置在其他地方,仍然有一个隐藏的炸弹图像设置在(0,0)。因为当我将Pacman图像移动到(0,0)以外时,"你好"停止打印。
import pygame,sys,random
from pygame.locals import *
pygame.init()
blue=(0,250,0)
red=(255,0,0)
black=(0,0,0)
screen = pygame.display.set_mode((1080, 720))
bomb=pygame.image.load("bomb2.bmp")
bomb_rect = bomb.get_rect()
pacman=pygame.image.load("pacman.png")
pacman_rect = pacman.get_rect()
pygame.display.set_caption('game')
background=pygame.Surface(screen.get_size()).convert()
background.fill((255,255,255))
randBombX = random.randrange(0,screen.get_width()-200)
randBombY = random.randrange(0,screen.get_height()-200)
bomb_rect.move(randBombX ,randBombY)
dir_x = 0
dir_y = 0
clock = pygame.time.Clock()
moving=True
while moving:
clock.tick(20)
screen.blit(background, (0,0))
pacman_rect.move_ip(dir_x, dir_y)
screen.blit(pacman, pacman_rect)
screen.blit(bomb,(randBombX ,randBombY))
pygame.display.flip()
for e in pygame.event.get():
if e.type == pygame.QUIT:
quit()
if e.type == KEYDOWN:
if e.key == K_ESCAPE:
moving = False
quit()
if e.key == K_LEFT:
if dir_x ==0 and dir_x >=0:
dir_x-=10
if dir_x == 10:
dir_x-=20
dir_y=0
if e.key == K_RIGHT:
if dir_x == 0 and dir_x <=0:
dir_x+=10
if dir_x == -10:
dir_x+=20
dir_y=0
if e.key == K_UP:
if dir_y ==0 and dir_y <=0:
dir_y -=10
if dir_y == 10:
dir_y -=20
dir_x=0
elif e.key == K_DOWN:
if dir_y ==0 and dir_y >=0:
dir_y +=10
if dir_y == -10:
dir_y +=20
dir_x=0
if pacman_rect.left < 0 or pacman_rect.right >= screen.get_width():
dir_x *= -1
if pacman_rect.top < 0 or pacman_rect.bottom >= screen.get_height():
dir_y *= -1
if bomb_rect.colliderect(pacman_rect)==True:
print("hello")
答案 0 :(得分:0)
if bomb_rect.colliderect(pacman_rect)==True:
有点多余;对于布尔值,a == True
与a
相同(如果a
为True
,a==True
为True
;否则为False
})。但这不应该改变你的程序的行为。
但是:
if dir_x ==0 and dir_x >=0:
dir_x-=10
如果dir_x == 0
(或许你会混淆and
和or
,就会发生这种情况?无论哪种情况,其中一个条件都包含在另一个条件中)。您的代码中有更多if
个;我不太确定他们应该做些什么,但据我所知,这可能会改变你的游戏行为,使其与你期望的一致。