python Pygame draw.circle()函数不工作

ghhkc1vu  于 2023-06-04  发布在  Python
关注(0)|答案(1)|浏览(167)

我试着通过www.example.com()在光标后面画一个圆pygame.draw.circle。但是,当我运行下面的代码时,我只能看到一个黑屏的窗口,光标后面什么也没有。

import pygame
from pygame.locals import *

# initialize pygame
pygame.init()

# set up the display
flags = pygame.DOUBLEBUF | pygame.HWSURFACE | pygame.OPENGL
resolution = (800, 600)
win = pygame.display.set_mode(resolution, flags)

# pygame event loop
while True:
    for event in pygame.event.get():
        if not event == None: # do not print anything if there is no action taking place
            print(event)
        if event.type == QUIT: # quit the program
            pygame.quit()
        if event.type == MOUSEMOTION:
            pygame.draw.circle(win, (255, 0, 0), event.pos, 5)
        if event.type == KEYDOWN:
            print(event.key, event.mod, pygame.key.name(event.key))
    pygame.display.flip()

有人能解释一下是什么问题吗?让pygame.draw.circle()函数按照它应该的方式工作。非常感谢。

km0tfn4u

km0tfn4u1#

必须在应用程序循环中绘制圆。在事件循环中设置位置,但在应用程序循环中在该位置绘制圆。事件循环仅在事件发生时执行,因此在那里绘制的所有内容仅在该时刻绘制。应用程序循环连续执行,并且每次通过对应于一个帧。通常,场景在每个帧中被重绘。这意味着必须在每一帧中清除显示,必须绘制场景,最后必须更新显示。
不幸的是,这并不能解决您的问题,因为您不能将Pygame的draw模块与OpenGL窗口一起使用。你需要创建一个默认的(没有OpenGL)窗口(或者你需要用OpenGL API绘制所有内容)。
工作示例:

import pygame
from pygame.locals import *

# initialize pygame
pygame.init()

# set up the display
#flags = pygame.DOUBLEBUF | pygame.HWSURFACE | pygame.OPENGL
resolution = (800, 600)
#win = pygame.display.set_mode(resolution, flags)
win = pygame.display.set_mode(resolution)
clock = pygame.time.Clock()

center = (400, 300)

# pygame event loop
run = True
while run:
    clock.tick(100)
    for event in pygame.event.get():
        if event.type == QUIT:
            run = False
        if event.type == MOUSEMOTION:
            center = event.pos
            
    win.fill(0)
    pygame.draw.circle(win, (255, 0, 0), center, 5)    
    pygame.display.flip() 

pygame.quit()
exit()

相关问题