微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Pygame - 如何从下到上逐渐填充对象?

如何解决Pygame - 如何从下到上逐渐填充对象?

我目前正在开发一款基于在餐厅工作的游戏,我正在处理的一个方面是给杯子装满水,我选择不进行水模拟,因为我不是专家 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() 返回一个布尔值列表,代表所有鼠标按钮的状态(TrueFalse)。只要按钮被按住,按钮的状态就是 True

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。