如何解决Pygame - 移动矩形中的中心文本
我正在 pygame 中制作一个数字游戏,并且有一些方块会从屏幕顶部落到底部,同时有一个数值,并且该数字显示在每个方块上。我正在努力使文本以正方形为中心,当每个数字可以包含 1 - 4 位数字时,这会变得更加困难
class sqr:
def __init__(self):
self.colours = [(255,0),(0,255,255)]
self.Xpositions = [0,125,245,365,485]
self.OnScreen = False
self.X = random.choice(self.Xpositions)
self.Y = 0
self.colour = random.choice(self.colours)
self.number = random.choice([20,40,80])
self.numberFont = pygame.font.Font("TitilliumWeb-Black.ttf",48)
def drawSquare(self,colour,X,Y):
pygame.draw.rect(screen,(X,Y,120,120))
def numberTextFunc(self,Y):
numberText = self.numberFont.render(f"{self.number}",True,(87,63,63))
screen.blit(numberText,Y))
square = sqr()
gameRunning = True
while gameRunning:
background = screen.fill((0,100,140))
#draw lines for grid
for i in range(5):
pygame.draw.rect(screen,(line[i],5,800))
for event in pygame.event.get():
if event.type == pygame.QUIT:
gameRunning = False
#square
square.drawSquare(square.colour,square.X,square.Y)
square.numberTextFunc(square.X,square.Y)
square.OnScreen = True
square.Y += 1
if square.Y >= 680:
square.Y = 680
pygame.display.update()
解决方法
使用 pygame.Surface.get_rect
获取文本矩形。 pygame.Surface.get_rect.get_rect()
返回一个具有 Surface 对象大小的矩形,该矩形始终从 (0,0) 开始。将文本矩形的中心设置为正方形的中心。使用文本 reectnagle blit
文本。 blit
的第二个参数是元组 (x,y) 或矩形。对于矩形,只考虑矩形的左上角。因此,您可以将文本矩形直接传递给 blit
:
class sqr:
# [...]
def numberTextFunc(self,X,Y):
numberText = self.numberFont.render(f"{self.number}",True,(87,63,63))
rect = pygame.Rect(X,Y,120,120)
textRect = numberText.get_rect(center = rect.center)
screen.blit(numberText,textRect)
您可以简化代码。 X
和 Y
是对象的属性。因此不需要将坐标传递给方法:
class sqr:
def __init__(self):
self.colours = [(255,0),(0,255,255)]
self.Xpositions = [0,125,245,365,485]
self.OnScreen = False
self.X = random.choice(self.Xpositions)
self.Y = 0
self.colour = random.choice(self.colours)
self.number = random.choice([20,40,80])
self.numberFont = pygame.font.Font("TitilliumWeb-Black.ttf",48)
def drawSquare(self,colour):
pygame.draw.rect(screen,colour,(self.X,self.Y,120))
def numberTextFunc(self):
numberText = self.numberFont.render(f"{self.number}",63))
rect = pygame.Rect(self.X,textRect)
gameRunning = True
while gameRunning:
background = screen.fill((0,100,140))
#draw lines for grid
for i in range(5):
pygame.draw.rect(screen,(line[i],5,800))
for event in pygame.event.get():
if event.type == pygame.QUIT:
gameRunning = False
#square
square.drawSquare(square.colour)
square.numberTextFunc()
square.OnScreen = True
square.Y += 1
if square.Y >= 680:
square.Y = 680
pygame.display.update()
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。