Python Forum

Full Version: Pygame : clearing a screen issue
You're currently viewing a stripped down version of our content. View the full version with proper formatting.
Hi, I'm currently stuggling with clearing my screen on pygame when a button is clicked. For example, when pygame.mouse.get_pressed()[0]==1 in my loop for the start button,it launches the start function and clears all the screen. Thanks!
import pygame
import os
os.chdir("C://Users//Ridha//Desktop//MAze-game-master")
pygame.init()
from pygame.locals import *
ecran = pygame.display.set_mode((1080,675))


class Options:
    hovered = False
    def __init__(self, text, pos, action):
        self.text = text
        self.pos = pos
        self.set_rect()
        self.draw()
        self.action=action

    def get_color(self):
        if self.hovered:
            return (255, 255, 255)
        else:
            return (100, 0,0)
    def set_rend(self):
        self.rend = menu_font.render(self.text, True, self.get_color())

    def draw(self):
        self.set_rend()
        ecran.blit(self.rend, self.rect)
    def set_rect(self):
        self.set_rend()
        self.rect = self.rend.get_rect()
        self.rect.topleft = self.pos
    def launch(self):
        if self.action=='Start':
            Start()
        elif self.action=='Settings':
            Settings()
        else:
            Credits()



def Start() :
    print('hey')
def Settings():
    print("hoy")
def Credits():
    print("how")


menu_font = pygame.font.Font('Police//Gilmoore Rough.otf', 45)
options = [Options("PLAY", (520, 300),'Start'), Options("SETTINGS", (465, 370),'Settings'),
           Options("CREDITS", (470, 440),'Credits')]
image = pygame.image.load("Foondpc.jpg").convert_alpha()

continuer=True
while continuer:
    ecran.blit(image,(0, 0))
    for option in options:
        if option.rect.collidepoint(pygame.mouse.get_pos()):
            option.hovered = True
            if pygame.mouse.get_pressed()[0]==1:
                option.launch()

        else:
            option.hovered = False
        option.draw()
    pygame.display.flip()

    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            continuer = False
        pygame.display.flip()


    pygame.display.update()
pygame.quit()
To clear a screen, fill it with a solid color:
ecran.fill((0, 0, 0))
Only have one pygame.display.flip() or pygame.display.update(). Many graphic glitches will happen if you use multiply flips or/and updates. You be forcing an unnatural refresh rate. Which some graphics cards will not handle it.
normally people put it in the main game loop too by the way
while continuer:
    ecran.fill((0, 0, 0))
    ecran.blit(image,(0, 0))
    ...
You are also on the verge of needing a state machine to handle multiple states.
(Jun-09-2020, 03:14 PM)Reldaing Wrote: [ -> ]Hi, I'm currently stuggling with clearing my screen on pygame when a button is clicked. For example, when pygame.mouse.get_pressed()[0]==1 in my loop for the start button,it launches the start function and clears all the screen. Thanks!
import pygame [url=https://cpstest.org/typing-speed-test]typing speed test[/url]
import os
os.chdir("C://Users//Ridha//Desktop//MAze-game-master")
pygame.init()
from pygame.locals import *
ecran = pygame.display.set_mode((1080,675))


class Options:
    hovered = False
    def __init__(self, text, pos, action):
        self.text = text
        self.pos = pos
        self.set_rect()
        self.draw()
        self.action=action

    def get_color(self):
        if self.hovered:
            return (255, 255, 255)
        else:
            return (100, 0,0)
    def set_rend(self):
        self.rend = menu_font.render(self.text, True, self.get_color())

    def draw(self):
        self.set_rend()
        ecran.blit(self.rend, self.rect)
    def set_rect(self):
        self.set_rend()
        self.rect = self.rend.get_rect()
        self.rect.topleft = self.pos
    def launch(self):
        if self.action=='Start':
            Start()
        elif self.action=='Settings':
            Settings()
        else:
            Credits()



def Start() :
    print('hey')
def Settings():
    print("hoy")
def Credits():
    print("how")


menu_font = pygame.font.Font('Police//Gilmoore Rough.otf', 45)
options = [Options("PLAY", (520, 300),'Start'), Options("SETTINGS", (465, 370),'Settings'),
           Options("CREDITS", (470, 440),'Credits')]
image = pygame.image.load("Foondpc.jpg").convert_alpha()

continuer=True
while continuer:
    ecran.blit(image,(0, 0))
    for option in options:
        if option.rect.collidepoint(pygame.mouse.get_pos()):
            option.hovered = True
            if pygame.mouse.get_pressed()[0]==1:
                option.launch()

        else:
            option.hovered = False
        option.draw()
    pygame.display.flip()

    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            continuer = False
        pygame.display.flip()


    pygame.display.update()
pygame.quit()

this is working for me, thank you!