Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Masalah mengemas kini segi empat tepat dengan sifat tersuai dalam Pygame

Masalah mengemas kini segi empat tepat dengan sifat tersuai dalam Pygame

王林
王林ke hadapan
2024-02-09 19:42:04469semak imbas

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

Kandungan soalan

Saya sedang menyahpepijat salah satu atur cara saya dan saya cuba menetapkan pembolehubah tersuai pada segi empat tepat untuk mengemas kini kedudukannya.

Ini kod saya:

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

Apabila saya melaksanakan program, sifat square.xvalue berubah, tetapi kedudukan segi empat sama pada skrin tidak berubah.

Apa yang saya terlepas?


Jawapan betul


Anda perlu melukis semula adegan itu. Segi empat tepat mesti dilukis semula selepas perubahan. Paparan jelas dan lukis segi empat tepat dalam gelung aplikasi:

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

Atas ialah kandungan terperinci Masalah mengemas kini segi empat tepat dengan sifat tersuai dalam Pygame. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Artikel ini dikembalikan pada:stackoverflow.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam