Xer*_*ath 11 python pygame python-3.x
我有一个代码:
# draw text
font = pygame.font.Font(None, 25)
text = font.render("You win!", True, BLACK)
screen.blit(text, [SCREEN_WIDTH / 2, SCREEN_HEIGHT / 2])
Run Code Online (Sandbox Code Playgroud)
我如何获得像java中的文本宽度和高度方法,所以我可以将文本居中,如:
screen.blit(text, [SCREEN_WIDTH / 2 - text_w / 2, SCREEN_HEIGHT / 2 - text_h / 2])
Run Code Online (Sandbox Code Playgroud)
如果这是不可能的,那么另一种方式是什么?我找到了这个例子,但我并没有真正理解它.
The*_*man 14
抓取它时,您始终可以将文本矩形居中:
# draw text
font = pygame.font.Font(None, 25)
text = font.render("You win!", True, BLACK)
text_rect = text.get_rect(center=(SCREEN_WIDTH/2, SCREEN_HEIGHT/2))
screen.blit(text, text_rect)
Run Code Online (Sandbox Code Playgroud)
只是另一种选择
pygame.Surface.get_rect.get_rect()返回一个具有Surface对象大小的矩形,该矩形始终从 (0, 0) 开始,因为Surface对象没有位置。矩形的位置可以通过关键字参数指定。例如,可以使用关键字参数指定矩形的中心center。pygame.Rect这些关键字参数在返回之前应用于 的属性(pygame.Rect有关关键字参数的完整列表,请参阅 参考资料)。
获取文本矩形并将文本矩形的中心放置在窗口矩形的中心上:
text_rect = text.get_rect(center = (SCREEN_WIDTH // 2, SCREEN_HEIGHT // 2))
Run Code Online (Sandbox Code Playgroud)
您甚至可以从显示Surface获取窗口的中心:
text_rect = text.get_rect(center = screen.get_rect().center)
Run Code Online (Sandbox Code Playgroud)
或者使用pygame.display.get_surface():
text_rect = text.get_rect(center = pygame.display.get_surface().get_rect().center)
Run Code Online (Sandbox Code Playgroud)
可以使用该方法在另一个Surface上绘制Surface。第二个参数是表示左上角的元组 ( x , y ) 或矩形。对于矩形,仅考虑矩形的左上角。因此,您可以将文本矩形直接传递给:blitblit
screen.blit(text, text_rect)
Run Code Online (Sandbox Code Playgroud)
最小的例子:
import pygame
import pygame.font
pygame.init()
font = pygame.font.SysFont(None, 50)
text = font.render('Hello World', True, (255, 0, 0))
window = pygame.display.set_mode((300, 100))
clock = pygame.time.Clock()
run = True
while run:
clock.tick(60)
for event in pygame.event.get():
if event.type == pygame.QUIT:
run = False
window.fill(0)
window.blit(text, text.get_rect(center = window.get_rect().center))
pygame.display.flip()
pygame.quit()
exit()
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
12836 次 |
| 最近记录: |