Heim  >  Artikel  >  Backend-Entwicklung  >  Problem beim Aktualisieren des Rechtecks ​​mit benutzerdefinierten Eigenschaften in Pygame

Problem beim Aktualisieren des Rechtecks ​​mit benutzerdefinierten Eigenschaften in Pygame

王林
王林nach vorne
2024-02-09 19:42:04468Durchsuche

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

Frageninhalt

Ich debugge eines meiner Programme und versuche, einem Rechteck eine benutzerdefinierte Variable zuzuweisen, um seine Position zu aktualisieren.

Das ist mein 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

Wenn ich das Programm ausführe, ändert sich die Eigenschaft „square.xvalue“, aber die Position des Quadrats auf dem Bildschirm ändert sich nicht.

Was habe ich verpasst?


Richtige Antwort


Sie müssen die Szene neu zeichnen. Nach Änderungen muss das Rechteck neu gezeichnet werden. Anzeige löschen und Rechteck in der Anwendungsschleife zeichnen:

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

Das obige ist der detaillierte Inhalt vonProblem beim Aktualisieren des Rechtecks ​​mit benutzerdefinierten Eigenschaften in Pygame. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:stackoverflow.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen