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

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

王林
Freigeben: 2024-02-09 19:42:04
nach vorne
492 Leute haben es durchsucht

在 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
Nach dem Login kopieren

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
Nach dem Login kopieren

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!

Quelle:stackoverflow.com
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage