Noob here-当我在屏幕上移动鼠标时,我的精灵的pygame动画会更新

时间:2020-05-13 17:04:42

标签: python pygame

在这里,菜鸟,我遇到了奇怪的故障或错误,也许我有此代码

Dim Shev As Application
Set Shev = Workbooks.Open(path, ReadOnly:=True).NewWindow
Shev.Visible = False

这段代码使计数器停止移动,除非当我将鼠标移到窗口上时它会忽略frame_count = 0并再次开始计数,下面的代码我创建了一个新的可验证的计时器,因此它实际上更改了一些是什么解决了我的问题,但是我对为什么上面的代码不能正常工作感到困惑,是一个小故障/错误还是只是我的错误代码哈哈,最下面是一个黑客工作,我宁愿它只是是frames_count = 0,而不是添加一个名为timer的全新变量。

Dim Shev As Workbook
Set Shev = Workbooks.Open(path, ReadOnly:=True)
Shev.Windows(1).Visible = False

1 个答案:

答案 0 :(得分:0)

您的代码未正确处理pygame.KEYUP事件。

由于是 event 情况,因此需要在事件处理循环中进行处理,而不是在检查按键的部分中进行处理:

if keys[pygame.K_DOWN]:
    y += vel
    player_direction = 'down'
    timer = 1
elif event.type == pygame.KEYUP:      # <-- SHOULD NOT BE HERE
    frames = 0
    timer = 0

但还有其他事件:

for event in pygame.event.get():
    if event.type == pygame.QUIT:
        sys.exit()  # Make the quit button work

    elif event.type == pygame.KEYUP:   # If *any* key released
        if event.key == pygame.K_r     # 'r' for Reset
            frames = 0
            timer = 0

    elif event.type == VIDEORESIZE:  # Makes the window resize not glitch
        screen = pygame.display.set_mode((event.w, event.h), RESIZABLE)

请注意,您现有的代码会在释放任何按键时重置计时器。这听起来对我来说是错误的,因为它将在释放您的任何移动键时触发-也许这就是您想要的。上面的示例代码仅在释放的密钥为frames的情况下重置timerr