Home  >  Article  >  Backend Development  >  Problem updating rectangle with custom properties in Pygame

Problem updating rectangle with custom properties in Pygame

王林
王林forward
2024-02-09 19:42:04469browse

在 Pygame 中使用自定义属性更新矩形时出现问题

Question content

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?


Correct answer


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!

Statement:
This article is reproduced at:stackoverflow.com. If there is any infringement, please contact admin@php.cn delete