Как сделать всю сцену невидимой, pygame - PullRequest
2 голосов
/ 05 мая 2020

Я пытаюсь сделать игру, в которой если кто-то нажмет левую кнопку мыши, pygame dr aws круг, а затем линия, соединяющая круг с левым верхним углом. Если он / она нажимает правую кнопку мыши, он удаляет все созданное с экрана. Я думал о том, чтобы просто закрыть все большим черным квадратом, но на самом деле это не очищает экран, а просто закрывает его. Мой код следующий:

    from pygame import * 
    init()
    size = width, height = 650, 650
    screen = display.set_mode(size)
    button = 0

    BLACK = (0, 0, 0)
    GREEN = (0, 255, 0)

    def drawScene(screen, button):
        # Draw circle if the left mouse button is down.
        if button==1:
            draw.circle(screen,GREEN,(mx,my), 10)
            draw.line(screen,GREEN, (0,0),(mx,my))
        if button == 3:
                mouse.set_visible(False)

        display.flip()


    running = True
    myClock = time.Clock()

    # Game Loop
    while running:
        for e in event.get():             # checks all events that happen
            if e.type == QUIT:
                running = False
            if e.type == MOUSEBUTTONDOWN:
                mx, my = e.pos          
                button = e.button        


        drawScene(screen, button)
        myClock.tick(60)                     # waits long enough to have 60 fps

    quit()

Пожалуйста, помогите мне в этой ситуации. Заранее спасибо.

Ответы [ 2 ]

1 голос
/ 05 мая 2020

Я думал о том, чтобы просто закрыть все большим черным квадратом, но на самом деле это не очищает экран, а просто закрывает его.

Нет никакой разницы между cover и clear . Экран состоит из пикселей. Рисование объекта просто меняет цвет пикселей. Рисование черного квадрата снова меняет цвет пикселя.

Обратите внимание: такие операции, как pygame.draw.circle() и pygame.draw.line(), не создают никаких объектов. Они просто изменяют цвета некоторых пикселей поверхности, которые передаются в операцию.

Самый простой способ очистить всего окна - это pygame.Surface.fill():

screen.fill((0, 0, 0))

соответственно

screen.fill(BLACK)
0 голосов
/ 05 мая 2020

В компьютерной графике нет такой вещи, как «очистка» экрана. вы можете только перезаписать предыдущий рисунок новыми пикселями. ваша идея нарисовать большой черный прямоугольник будет отлично работать, но я могу более эффективно использовать screen.fill(0)

...