[英]How would I create side scrolling text in PyGame?
我目前正在使用 PyGame 框架开发天气应用程序,它需要在底部有侧滚动文本,但我不知道该怎么做。 我在网上找了教程,我发现了类似的东西,但不是我想要的。
这是我最后的代码,所有文本都已初始化。
desc_text = desc.render(description, True, (255, 255, 255))
desc_rect = desc_text.get_rect()
desc_rect.center = (238, 740)
screen = pygame.display.set_mode((960, 720), pygame.FULLSCREEN, vsync=1)
while running:
try:
for event in pygame.event.get():
if event.type == KEYDOWN:
if event.key == K_ESCAPE:
running = False
elif event.type == QUIT:
running = False
screen.fill((0, 0, 125))
screen.blit(header_text, header_rect)
screen.blit(temperature_text, temperature_rect)
screen.blit(wind_text, wind_rect)
screen.blit(desc_text, desc_rect)
pygame.display.update()
except KeyboardInterrupt:
print("Quitting...")
running = False
我希望它像一个选框,从左到右无休止地滚动。
我不明白有什么问题。
最简单的版本,它向左移动,当所有文本都离开屏幕左侧时,它会在右侧需要时再次显示
rect.x = screen_rect.right
rect.x -= 1
rect.right <= 0
并移动到右侧rect.x = screen_rect.right
你应该从这个开始 - 稍后尝试创建更复杂的版本,当有空格文本后立即重复文本。
import pygame
pygame.init()
screen = pygame.display.set_mode((960, 720))#, pygame.FULLSCREEN, vsync=1)
screen_rect = screen.get_rect()
font = pygame.font.SysFont(None, 50)
description = " How would I create side scrolling text in PyGame? "
desc_text = font.render(description, True, (255, 255, 255))
desc_rect = desc_text.get_rect(left=screen_rect.right)
running = True
while running:
try:
for event in pygame.event.get():
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_ESCAPE:
running = False
elif event.type == pygame.QUIT:
running = False
# --- updates (without draws) ---
desc_rect.x -= 1
if desc_rect.right <= 0: # if leave on left side
desc_rect.x = screen_rect.right # then move to right side
# --- draws (without updates) ---
screen.fill((0, 0, 125))
screen.blit(desc_text, desc_rect)
pygame.display.update()
except KeyboardInterrupt:
print("Quitting...")
running = False
pygame.quit()
要制作更复杂的版本,您必须重复相同的文本 2 或 3 次 - 所以它需要创建 2 或 3 个带偏移量的rect
。 第一个从rect.x
开始,第二个从rect.x + rect.width
开始,第三个从rect.x + rect.width + rect.width
开始。 对于所有这些,您必须重复(几乎)与以前版本相同的代码。 如果您将所有rect
都放在列表中,那么它会更简单。
区别是:当它离开左侧时,向右移动rect.width * 3
import pygame
pygame.init()
screen = pygame.display.set_mode((960, 720))#, pygame.FULLSCREEN, vsync=1)
screen_rect = screen.get_rect()
font = pygame.font.SysFont(None, 50)
description = " How would I create side scrolling text in PyGame? "
desc_text = font.render(description, True, (255, 255, 255))
# because text is short so I need 3 copies (with different offsets)
desc_rects = []
for i in range(3):
rect = desc_text.get_rect(left=screen_rect.right)
rect.x += rect.width * i # add offset
desc_rects.append(rect)
running = True
while running:
try:
for event in pygame.event.get():
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_ESCAPE:
running = False
elif event.type == pygame.QUIT:
running = False
# --- updates (without draws) ---
for rect in desc_rects:
rect.x -= 1
if rect.right <= 0:
rect.x += rect.width * 3
# --- draws (without updates) ---
screen.fill((0, 0, 125))
for rect in desc_rects:
screen.blit(desc_text, rect)
pygame.display.update()
except KeyboardInterrupt:
print("Quitting...")
running = False
pygame.quit()
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.