繁体   English   中英

如何在 PyGame 中创建侧滚动文本?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM