Python Pygame:在对象中使用Python.draw.rect时出错

Python Pygame:在对象中使用Python.draw.rect时出错,python,oop,pygame,Python,Oop,Pygame,我对编程相当陌生,尤其是面向对象语言。 我试图将矩形绘制为对象的实例,以便以后可以与它们交互。 我正在使用pygame 在for循环中使用以下行时,它将按预期绘制矩形: pygame.draw.rect(显示,白色,(x位置,y位置,方框大小,方框大小)) 但是,当我尝试将其实现到一个对象中时,我得到一个错误,即Rect不是pygame.Rect的有效参数。这怎么可能?是否超出了对象的范围 还有,这是正确的方法吗 非常感谢你的帮助 import pygame,sys 随机输入 从pygame.

我对编程相当陌生,尤其是面向对象语言。 我试图将矩形绘制为对象的实例,以便以后可以与它们交互。 我正在使用pygame

在for循环中使用以下行时,它将按预期绘制矩形:

pygame.draw.rect(显示,白色,(x位置,y位置,方框大小,方框大小))
但是,当我尝试将其实现到一个对象中时,我得到一个错误,即Rect不是pygame.Rect的有效参数。这怎么可能?是否超出了对象的范围

还有,这是正确的方法吗

非常感谢你的帮助

import pygame,sys
随机输入
从pygame.locals导入*
#全局变量
显示宽度=600
显示高度=400
DISPLAY=pygame.DISPLAY.set_模式((显示宽度、显示高度),0,32)
#框变量
箱子数量=9
盒子尺寸=30
清除边缘=1.5*框大小
#颜色
白色=(255255)
蓝色=(0,0255)
#长方体
类框:
悬停=错误
定义初始值(自身、位置、大小):
self.size=大小
self.pos=pos
#SELF.draw.rect注释(显示、白色、位置、大小)
def牵引(自):
self.set_rend()
screen.blit(self.rend、self.rect)
def set_rend(自):
self.rend=pygame.draw.rect(DISPLAY,WHITE,self.pos,self.size)#此行出错:rect参数无效
def main():
pygame.init()
显示。填充(蓝色)
框=[]
#绘制随机框
对于范围内的i(框的数量):
random\u x=random.randint(0,2*数量\u盒)
random\u y=random.randint(0,2*数量\u盒)
x_pos=(随机_x/(2*数量_框))*(显示宽度-2*清除边缘)+清除边缘
y_位置=(随机_y/(2*数量_框))*(显示高度-2*清除边缘)+清除边缘
#pygame.draw.rect(显示,白色,(x位置,y位置,方框大小,方框大小))
框。追加(框((x_位置,y_位置),框大小))
打印(框)
对于盒子中的盒子:
方框图()
尽管如此:
对于pygame.event.get()中的事件:
如果event.type==退出:
pygame.quit()
sys.exit()
pygame.display.update()
main()
第三个参数必须是包含4个元素(x、y、widt、height)的元组:

self.rend=pygame.draw.rect(显示,白色,(self.pos[0],self.pos[1],self.size,self.size))
分别

self.rend=pygame.draw.rect(显示,白色,(*self.pos,self.size,self.size))

如果你想用

DISPLAY.blit(self.rend、self.rect)
然后您必须创建一个和一个:

类框:
悬停=错误
定义初始值(自身、位置、大小):
self.size=大小
self.pos=pos
self.set_rend()
def牵引(自):
DISPLAY.blit(self.rend、self.rect)
def set_rend(自):
self.rend=pygame.Surface((self.size,self.size))
self.rect=self.rend.get_rect(中心=self.pos)
自撕裂填充(白色)
但是,如果您只是想画一个白色矩形,那么您根本不需要
blit

类框:
悬停=错误
定义初始值(自身、位置、大小):
self.size=大小
self.pos=pos
def牵引(自):
pygame.draw.rect(显示,白色,(*self.pos,self.size,self.size))
第三个参数必须是包含4个元素(x、y、widt、height)的元组:

self.rend=pygame.draw.rect(显示,白色,(self.pos[0],self.pos[1],self.size,self.size))
分别

self.rend=pygame.draw.rect(显示,白色,(*self.pos,self.size,self.size))

如果你想用

DISPLAY.blit(self.rend、self.rect)
然后您必须创建一个和一个:

类框:
悬停=错误
定义初始值(自身、位置、大小):
self.size=大小
self.pos=pos
self.set_rend()
def牵引(自):
DISPLAY.blit(self.rend、self.rect)
def set_rend(自):
self.rend=pygame.Surface((self.size,self.size))
self.rect=self.rend.get_rect(中心=self.pos)
自撕裂填充(白色)
但是,如果您只是想画一个白色矩形,那么您根本不需要
blit

类框:
悬停=错误
定义初始值(自身、位置、大小):
self.size=大小
self.pos=pos
def牵引(自):
pygame.draw.rect(显示,白色,(*self.pos,self.size,self.size))

因此,本质上渲染曲面并填充曲面与使用pygame.draw.rect?@Rumturf
pygame.draw.rect
在曲面上绘制矩形是一样的。但它不会创建新曲面<代码>blit,将一个曲面放置到另一个曲面上。所以你必须创造一个。我已经扩展了答案。因此,基本上渲染曲面并填充曲面与使用pygame.draw.rect?@Rumturf
pygame.draw.rect
在曲面上绘制矩形是一样的。但它不会创建新曲面<代码>blit,将一个曲面放置到另一个曲面上。所以你必须创造一个。我已经扩展了答案。