是否可以为pygame.Rect对象创建新的可分配属性?

时间:2019-07-08 01:35:33

标签: python pygame

我希望能够将Rect对象的中心坐标设置为等于元组,就像设置任何角坐标或任何边的中点坐标等于元组一样,这将使用类似于以下代码的代码将值分配给适当的Rect属性:

a_rectangle = pygame.Rect(ValueForX, ValueForY, width, height) #creates Rect object with top-left corner at (ValueForX, ValueForY)
a_rectangle.topleft = (DifferentX, DifferentY) #sets top-left corner coordinates to (DifferentX, DifferentY)

据我所知,Rect对象的中心没有预先存在的属性-请参见here-因此,除了使用上面的代码,我还必须使用看起来像这样的代码:

a_rectangle = pygame.Rect(ValueForX, ValueForY, width, height) #creates Rect object with top-left corner at (ValueForX, ValueForY)
a_rectangle.centerx = Xvalue #sets x-value for the center coordinate to Xvalue
a_rectangle.centery = Yvalue #sets y-value for the center coordinate to Yvalue

由于依赖于程序,这不像从帽子里摘几个数字并用它来完成那样简单,我宁愿使用更少的代码行,以免最终手上一团糟。

有人知道是否可以为Rect对象的中心坐标创建一个新属性,如果可以,该怎么做?谢谢!

1 个答案:

答案 0 :(得分:2)

Rect有center

a_rectangle.center = (X, Y)

使元素在窗口中居中或使按钮上的文本居中

a_rectangle.center = window.center
text.center = button.center

请参阅官方文档:Rect

x,y
top, left, bottom, right
topleft, bottomleft, topright, bottomright
midtop, midleft, midbottom, midright
center, centerx, centery
size, width, height
w,h

编辑:

如果您需要Rect中的新函数或变量,则可以基于Rect创建自己的类并添加自己的函数。然后使用您的班级代替Rect

import math
import pygame

class MyRect(pygame.Rect):

    @property    
    def area(self):
        return self.width * self.height

    @area.setter
    def area(self, value):
        self.width = self.height = int(math.sqrt(value))

a_rectangle = MyRect(0, 0, 10, 10) 
print( a_rectangle.center )

print( a_rectangle.area ) # 100
print( a_rectangle.width, a_rectangle.height ) # 10, 10

a_rectangle.area = 144

print( a_rectangle.area ) # 144
print( a_rectangle.width, a_rectangle.height ) # 12, 12