Обновление дисплея Pygame Glitch? - PullRequest
0 голосов
/ 05 июня 2018

У меня есть какой-то код, который довольно прикольный.По сути, переменная gameStart находится в переменной, которая использует функцию cursorOver, которая находит и определяет, где и находится ли кнопка мыши и нажата ли она.У меня есть 3 кнопки, и я хочу, чтобы каждая кнопка становилась больше, когда курсор находится над кнопкой.Первая кнопка реализации работает.Однако, если я пытаюсь добавить другую кнопку, кнопка увеличивается, однако кнопка начинает мигать.

window.blit(background,(0,0))
window.blit(title,(175,200))
pygame.draw.rect(window,PURPLE,(50,400,200,100),0)
pygame.draw.rect(window,PURPLE,(300,400,200,100),0)
pygame.draw.rect(window,PURPLE,(550,400,200,100),0)
close()

mouseX,mouseY = pygame.mouse.get_pos()
mouseClick = pygame.mouse.get_pressed()[0]

gameStartC = cursorOver(50,400,200,100,mouseX,mouseY)
instructionStartC = cursorOver(300,400,200,100,mouseX,mouseY)
objectiveStartC = cursorOver(550,400,200,100,mouseX,mouseY)
nextStartC = cursorOver(580,250,175,100,mouseX,mouseY)

if gameStartC == True:
    while True:
        pygame.draw.rect(window,PURPLE,(25,375,250,150),0)
        pygame.display.update()
        break
else:
    pygame.draw.rect(window,PURPLE,(50,400,200,100),0)
    pygame.display.update()
#this is the part where the code becomes glitchy
if instructionStartC == True:
    while True:
        pygame.draw.rect(window,PURPLE,(275,375,250,150),0)
        pygame.display.update()
        break
else:
    pygame.draw.rect(window,PURPLE,(300,400,200,100),0)
    pygame.display.update()

The image is the menu screen that I want to impliment

1 Ответ

0 голосов
/ 05 июня 2018

Это просто потому, что вы звоните pygame.display.update() несколько раз.

Вы должны создать стандартный игровой цикл, который обычно выполняет эти три вещи:

  • обрабатывать ввод
  • обновить состояние
  • нарисовать на экран

, а затем повторить.

На шаге «рисовать на экран» вы рисуете все свои спрайты / ректы / что угоднона поверхность экрана, а затем, в конце концов, вызовите pygame.display.update() один раз в конце.

Многократный вызов pygame.display.update(), не очистка экрана между итерациями цикла и создание нескольких ненужных циклов событий - типичные ошибки новичка, которыеИМХО.

Итак, в вашем случае код должен выглядеть примерно так:

if gameStartC:
    pygame.draw.rect(window,PURPLE,(25,375,250,150),0)
else:
    pygame.draw.rect(window,PURPLE,(50,400,200,100),0)

if instructionStartC:
    pygame.draw.rect(window,PURPLE,(275,375,250,150),0)
else:
    pygame.draw.rect(window,PURPLE,(300,400,200,100),0)

pygame.display.update()

Я не знаю, что вы ожидали от while -циклы, и, возможно, вам следует использовать классы pygames Rect и Sprite.Это облегчит вашу жизнь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...