Вы можете сгенерировать текст в начале, чтобы получить его размер
fontTitle = pygame.font.SysFont("arial", 10)
textTitle = fontTitle.render("Go Huskies", True, colour)
rectTitle = textTitle.get_rect(center=screen.get_rect().center)
и позже использовать только это rectTitle
, чтобы переместить его и проверить столкновение с границами - и не создавать новые textTitle.get_rect()
screen.blit(textTitle, rectTitle)
Rect
имеет .top
, .bottom
, .left
, .right
, .centerx
, .centery
, которые можно использовать для проверки столкновения
oldx, oldy = rectTitle.center
rectTitle.move_ip(dx, dy)
if (rectTitle.top <= 0) or (rectTitle.bottom >= height):
dy = 0
rectTitle.centery = oldy
if (rectTitle.left <= 0) or (rectTitle.right >= width):
dx = 0
rectTitle.centerx = oldx
import pygame
import sys
# --- constants --- (UPPER_CASE_NAMES)
WHITE = (255,255,255)
GREEN = (0,255,0)
RED = (255,0,0)
BLUE = (0,0,255)
BLACK = (0, 0, 0)
YELLOW = (255, 255, 0)
# --- classes --- (CamelCaseNames)
# empty
# --- functions --- (lower_case_names)
# empty
# --- main --- (lower_case_names)
pygame.init()
screen = pygame.display.set_mode((800,600),0)
screen_rect = screen.get_rect()
pygame.display.set_caption("Basic Pygame Text With Rects")
x, y = screen_rect.center
width, height = screen_rect.size
dx = 0
dy = 0
speed = 10
oldx = x
oldy = y
colour = BLACK
fontTitle = pygame.font.SysFont("arial", 10)
textTitle = fontTitle.render("Go Huskies", True, colour)
rectTitle = textTitle.get_rect(center=screen_rect.center)
# - mainloop -
clock = pygame.time.Clock()
main = True
while main:
# - events -
for event in pygame.event.get():
if event.type ==pygame.QUIT:
main = False
if event.type ==pygame.KEYDOWN:
if event.key == pygame.K_UP:
dx = 0
dy = -speed
colour = RED
elif event.key == pygame.K_DOWN:
dx = 0
dy = speed
colour = BLUE
elif event.key == pygame.K_LEFT: # note: this section of code
dx = -speed # doesn't have to change from
dy = 0
colour = GREEN
elif event.key == pygame.K_RIGHT:
dx = speed
dy = 0
colour = YELLOW
elif event.key == pygame.K_c:
x, y = screen_rect.center
colour = BLACK
if event.type == pygame.KEYUP:
if event.key == pygame.K_UP or event.key == pygame.K_DOWN:
dx = 0
dy = 0
elif event.key == pygame.K_LEFT or event.key == pygame.K_RIGHT:
dx = 0
dy = 0
# - moves/updates -
oldx, oldy = rectTitle.center
rectTitle.move_ip(dx,dy)
if (rectTitle.top <= 0) or (rectTitle.bottom >= height):
dy = 0
rectTitle.centery = oldy
if (rectTitle.left <= 0) or (rectTitle.right >= width):
dx = 0
rectTitle.centerx = oldx
textTitle = fontTitle.render("Go Huskies", True, colour)
# - draws -
screen.fill(WHITE)
screen.blit(textTitle, rectTitle)
pygame.display.update()
clock.tick(25) # slow down to 25 FPS (frames per seconds)
# - end -
pygame.quit()
sys.exit()
Если вы хотите переместить текст с фоновым прямоугольником, вы можете создать Surface()
, залить его каким-нибудь цветом и затем скопировать текст
в начале:
rectRect = pygame.surface.Surface
fontTitle = pygame.font.SysFont("arial", 10)
textTitle = fontTitle.render("Go Huskies", True, colour)
rectTitle = textTitle.get_rect(center=screen_rect.center)
item_surface = pygame.surface.Surface(rectTitle.size)
item_surface.fill(RED)
item_surface.blit(textTitle, (0,0))
textTitle = item_surface
в л oop:
textTitle = fontTitle.render("Go Huskies", True, colour)
item_surface = pygame.surface.Surface(rectTitle.size)
item_surface.fill(RED)
item_surface.blit(textTitle, (0,0))
textTitle = item_surface
Полный код:
import pygame
import sys
# --- constants --- (UPPER_CASE_NAMES)
WHITE = (255,255,255)
GREEN = (0,255,0)
RED = (255,0,0)
BLUE = (0,0,255)
BLACK = (0, 0, 0)
YELLOW = (255, 255, 0)
# --- classes --- (CamelCaseNames)
# empty
# --- functions --- (lower_case_names)
# empty
# --- main --- (lower_case_names)
pygame.init()
screen = pygame.display.set_mode((800,600),0)
screen_rect = screen.get_rect()
pygame.display.set_caption("Basic Pygame Text With Rects")
x, y = screen_rect.center
width, height = screen_rect.size
dx = 0
dy = 0
speed = 10
oldx = x
oldy = y
colour = BLACK
rectRect = pygame.surface.Surface
fontTitle = pygame.font.SysFont("arial", 10)
textTitle = fontTitle.render("Go Huskies", True, colour)
rectTitle = textTitle.get_rect(center=screen_rect.center)
item_surface = pygame.surface.Surface(rectTitle.size)
item_surface.fill(RED)
item_surface.blit(textTitle, (0,0))
textTitle = item_surface
# - mainloop -
clock = pygame.time.Clock()
main = True
while main:
# - events -
for event in pygame.event.get():
if event.type ==pygame.QUIT:
main = False
if event.type ==pygame.KEYDOWN:
if event.key == pygame.K_UP:
dx = 0
dy = -speed
colour = RED
elif event.key == pygame.K_DOWN:
dx = 0
dy = speed
colour = BLUE
elif event.key == pygame.K_LEFT: # note: this section of code
dx = -speed # doesn't have to change from
dy = 0
colour = GREEN
elif event.key == pygame.K_RIGHT:
dx = speed
dy = 0
colour = YELLOW
elif event.key == pygame.K_c:
x, y = screen_rect.center
colour = BLACK
if event.type == pygame.KEYUP:
if event.key == pygame.K_UP or event.key == pygame.K_DOWN:
dx = 0
dy = 0
elif event.key == pygame.K_LEFT or event.key == pygame.K_RIGHT:
dx = 0
dy = 0
# - moves -
oldx, oldy = rectTitle.center
rectTitle.move_ip(dx,dy)
if (rectTitle.top <= 0) or (rectTitle.bottom >= height):
dy = 0
rectTitle.centery = oldy
if (rectTitle.left <= 0) or (rectTitle.right >= width):
dx = 0
rectTitle.centerx = oldx
textTitle = fontTitle.render("Go Huskies", True, colour)
item_surface = pygame.surface.Surface(rectTitle.size)
item_surface.fill(RED)
item_surface.blit(textTitle, (0,0))
textTitle = item_surface
# - draws -
screen.fill(WHITE)
screen.blit(textTitle, rectTitle)
pygame.display.update()
clock.tick(25) # slow down to 25 FPS (frames per seconds)
# - end -
pygame.quit()
sys.exit()
![enter image description here](https://i.stack.imgur.com/g5DZ1.png)