Mac OSX Mojave上Pygame中的绘图不一致

时间:2019-05-20 19:03:24

标签: python macos pygame macos-mojave

我一直在制作口袋妖怪式游戏一个月左右,最近才更新到Mojave,以查看新功能。

更新后,我注意到了我的游戏中的一些小问题,其中一个具体问题是HP Bar,它没有像High Sierra那样绘制。在逐渐减少宽度之前,但是现在程序只是冻结动画播放的时间,然后跳到动画结尾。为什么会发生这种情况?

到目前为止,我知道Pygame的Mojave出现了问题(据说是由于新的黑暗模式造成的),但是我还没有看到有人描述这种情况,其中只有一小部分是他们的。程序已受到影响-大多数报告来自18年,并且抱怨完全缺乏绘图功能

无论如何,这是我的HP Bar动画代码:

def changeHP(barPos, maxHP, startHP, dif): #This function displays the animation for hp loss/gain
    timer = pygame.time.Clock()
    for i in range(int(dif*100/maxHP)):
        difPer = (maxHP*i/100)
        if startHP - difPer <= maxHP/5:
            color = Color(255, 0, 0, 255)
        elif startHP - difPer <= maxHP/2:
            color = Color(255, 255, 0, 255)
        else:
            color = Color(0, 255, 0, 255)
        pygame.draw.rect(screen, Color(255, 255, 255, 255), (barPos[0], barPos[1], 144, 9))
        pygame.draw.rect(screen, color, (barPos[0], barPos[1], ((startHP - difPer)/maxHP) * 144, 9))
        pygame.display.update()
        timer.tick(60)

很抱歉,如果其中一些值看起来很复杂,那就是正在进行的工作。

1 个答案:

答案 0 :(得分:0)

嗯,我认为这实际上没有用,但确实可以。

我在循环中添加了事件队列检查,一切恢复正常。

这是我更新的代码:

def changeHP(barPos, maxHP, startHP, dif): #This function displays the animation for hp loss/gain
timer = pygame.time.Clock()
for i in range(int(dif*100/maxHP)):
    difPer = (maxHP*i/100)
    if startHP - difPer <= maxHP/5:
        color = Color(255, 0, 0, 255)
    elif startHP - difPer <= maxHP/2:
        color = Color(255, 255, 0, 255)
    else:
        color = Color(0, 255, 0, 255)
    pygame.draw.rect(screen, Color(255, 255, 255, 255), (barPos[0], barPos[1], 144, 9))
    pygame.draw.rect(screen, color, (barPos[0], barPos[1], ((startHP - difPer)/maxHP) * 144, 9))
    pygame.display.update()
    timer.tick(60)
    for event in pygame.event.get():
        if event.type == QUIT:
            pygame.quit()
            sys.exit()