gpt4 book ai didi

python - 按屏幕比例调整大小

转载 作者:太空宇宙 更新时间:2023-11-03 11:13:54 29 4
gpt4 key购买 nike

我遇到了 pygame 的问题。具体来说,我坚持如何根据窗口按比例调整文本大小(窗口可调整大小并带有图片)。

这是我的代码。

import pygame
from pygame.locals import *
import numpy as np
import matplotlib.pyplot as plt
import argparse
import threading, os, sys, time

pygame.init()
pygame.display.set_caption("AI Battlehip Game")
FPS = pygame.time.Clock()

red = (255,0,0)

screen = pygame.display.set_mode((1200,700), HWSURFACE|DOUBLEBUF|RESIZABLE)
add_screen = screen.copy()
back_end_image_set = pygame.image.load(r'/Users/User1/Desktop/Project work/images/backgroundimage1.jpg')
screen.blit(pygame.transform.scale(back_end_image_set, (1200,700)), (0,0))
pygame.display.flip()


myFont = pygame.font.SysFont("monospace", 300)
label = myFont.render("Check 1", 40, (red))
add_screen.blit(pygame.transform.scale(label, (700, 500)), (0,0))

FPS.tick(60)

try:
while True:
pygame.event.pump()
event = pygame.event.wait()
if event.type == QUIT:
pygame.display.quit()
elif event.type == VIDEORESIZE:
screen = pygame.display.set_mode(event.dict['size'], HWSURFACE|DOUBLEBUF|RESIZABLE)
screen.blit(pygame.transform.scale(back_end_image_set, event.dict['size']), (0,0))
pygame.display.flip()
except:
raise

我们将不胜感激任何帮助。

最佳答案

首先存储surface的原始尺寸:

original_size = (1200,700)
screen = pygame.display.set_mode(original_size, HWSURFACE|DOUBLEBUF|RESIZABLE)

那么你有 2 个选择。

选项 1:

使用pygame.font并将文本渲染到表面:

myFont = pygame.font.SysFont("monospace", 300)
label = myFont.render("Check 1", 40, (red))

按新窗口大小和原始窗口大小的比例缩放文本表面,并将其blit 到表面:

pygame.event.pump()
event = pygame.event.wait()
if event.type == QUIT:
pygame.display.quit()
elif event.type == VIDEORESIZE:
screen = pygame.display.set_mode(event.dict['size'], HWSURFACE|DOUBLEBUF|RESIZABLE)

new_size = event.dict['size']
screen.blit(pygame.transform.scale(back_end_image_set, new_size), (0,0))

label_w = label.get_width() * new_size[0] // original_size[0]
label_h = label.get_height() * new_size[1] // original_size[1]

screen.blit(pygame.transform.scale(label, (label_w, label_h)), (0,0))
pygame.display.flip()

选项 2:

使用pygame.freetype :

import pygame.freetype

myFont = pygame.freetype.SysFont('monospace', 30)

计算文本区域的缩放大小并直接渲染到调整大小的屏幕。请注意,文本按新窗口宽度与原始窗口宽度的比例缩放。此实现保持文本宽度和高度的比例,不会拉伸(stretch)或挤压文本:

pygame.event.pump()
event = pygame.event.wait()
if event.type == QUIT:
pygame.display.quit()
elif event.type == VIDEORESIZE:
screen = pygame.display.set_mode(event.dict['size'], HWSURFACE|DOUBLEBUF|RESIZABLE)

new_size = event.dict['size']
screen.blit(pygame.transform.scale(back_end_image_set, new_size), (0,0))

myFont.render_to(screen, (0, 0), "Check 1", fgcolor=red, size = 300 * new_size[0] // original_size[0])
pygame.display.flip()

关于python - 按屏幕比例调整大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55382238/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com