问题描述
我目前正在开发一款基于在餐厅工作的游戏,我正在处理的一个方面是给杯子装满水,我选择不进行水模拟,因为我不是专家 ahah 但是我在按住鼠标按钮时使用矩形一个接一个地装满杯子的想法不起作用。这是我试图修复的代码部分,感谢任何和所有反馈:)。
while True:
e = pygame.event.wait()
if e.type == pygame.MOUSEBUTTONDOWN:
DrawWater = True
if e.type == pygame.MOUSEBUTTONUP:
print("Lol")
WaterLine = False
if DrawWater:
pygame.draw.rect(screen,[0,255],[300,WaterLine,400,1])
WaterLine -= 1
pygame.display.flip()
解决方法
pygame.event.wait()
等待队列中的单个事件并停止应用程序循环。实现一个事件循环并使用 pygame.event.get
:
使用 pygame.time.Clock
控制每秒帧数,从而控制游戏速度。
tick()
对象的方法 pygame.time.Clock
以这种方式延迟游戏,即循环的每次迭代消耗相同的时间段。见pygame.time.Clock.tick()
。
这个方法应该每帧调用一次。
这意味着循环:
clock = pygame.time.Clock()
run = True
while run:
clock.tick(60)
每秒运行 60 次。
clock = pygame.time.Clock()
run = True
while run:
clock.tick(60)
for event in pygame.event.get():
if event.type == pygame.QUIT:
run = False
if event.type == pygame.MOUSEBUTTONDOWN:
DrawWater = True
if event.type == pygame.MOUSEBUTTONUP:
print("Lol")
WaterLine = False
if DrawWater:
pygame.draw.rect(screen,[0,255],[300,WaterLine,400,1])
WaterLine -= 1
pygame.display.flip()
或者您可以使用 pygame.mouse.get_pressed()
:
import pygame
pygame.init()
screen = pygame.display.set_mode((300,400))
WaterLine = 300
clock = pygame.time.Clock()
run = True
while run:
clock.tick(60)
for event in pygame.event.get():
if event.type == pygame.QUIT:
run = False
if any(pygame.mouse.get_pressed()):
pygame.draw.rect(screen,[100,100,1])
WaterLine -= 1
pygame.display.flip()
MOUSEBUTTONDOWN
事件在您单击鼠标按钮时发生一次,而 MOUSEBUTTONUP
事件在鼠标按钮被释放时发生一次。pygame.mouse.get_pressed()
返回一个布尔值列表,代表所有鼠标按钮的状态(True
或 False
)。只要按钮被按住,按钮的状态就是 True
。