I am debugging one of my programs and I am trying to assign a custom variable to a rectangle to update its position.
This is my code:
import os ; os.environ['PYGAME_HIDE_SUPPORT_PROMPT']='False' import pygame, random pygame.init() display = pygame.display.set_mode((401, 401)) display.fill("white") ; pygame.display.flip() class MyRect(pygame.Rect): def __setattr__(self, attr, value): # Sets a custom attribute to a rectangle super().__setattr__(attr, value) if attr == 'xValue': pygame.Rect.move(self, (value-self.centerx), 0) # Move the rectangle according to the xValue def contains(self, coords): return self.collidepoint(coords) square = MyRect(175, 175, 50, 50) pygame.draw.rect(display, 'steelBlue', square) # Draw the rectangle to the screen square.xValue = 200 while True: for event in pygame.event.get(): if event.type == pygame.QUIT: pygame.quit() ; exit() elif event.type == pygame.MOUSEBUTTONDOWN: if square.contains(pygame.mouse.get_pos()): square.xValue = random.randint(0, display.get_width()) # Update the square.xValue property pygame.display.flip() # Update the screen
When I execute the program, the square.xvalue property is changing, but the position of the square on the screen is not changing.
What did I miss?
You must redraw the scene. The rectangle must be redrawn after changes. Clear display and draw rectangle in application loop:
while True: for event in pygame.event.get(): if event.type == pygame.QUIT: pygame.quit() ; exit() elif event.type == pygame.MOUSEBUTTONDOWN: if square.contains(pygame.mouse.get_pos()): square.xValue = random.randint(0, display.get_width()) # Update the square.xValue property display.fill("white"); pygame.draw.rect(display, 'steelBlue', square) pygame.display.flip() # Update the screen
The above is the detailed content of Problem updating rectangle with custom properties in Pygame. For more information, please follow other related articles on the PHP Chinese website!