我希望能够将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对象的中心坐标创建一个新属性,如果可以,该怎么做?谢谢!
答案 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