【问题标题】:Pygame : smooth picture aparitionPygame:流畅的画面幻影
【发布时间】:2019-02-08 13:39:07
【问题描述】:

有人可以帮助我吗? :

我尝试制作一个在用户屏幕上流畅显示的标题:

def image(name,x,y,u):
   screen.blit(name,(x,y))
   if u = 1
      pygame.display.update()

Window == 'main'
While windows = 'main':
   image(background,0,0)
   image(title, 640, 120)
   pygame.display.update()

但是文本突然出现,而不是我想要的......

【问题讨论】:

  • 当你写“如我所愿......”时,你是什么意思?那你觉得怎么样?
  • 我想让倾斜淡入,动画流畅
  • 好的。请善待并将该信息添加到您的问题中。
  • 是的,对不起
  • 抱歉,我这几天不在线,有点问题,不过我觉得没关系

标签: python pygame python-3.7 pygame-surface


【解决方案1】:

你要使用透明度,而pygame使用three different types

pygame 支持三种类型的透明度:颜色键、表面 alpha 和像素 alpha。表面 alpha 可以与 colorkeys 混合,但具有每像素 alpha 的图像不能使用其他模式。 Colorkey 透明度使单个颜色值透明。任何与颜色键匹配的像素都不会被绘制。表面 alpha 值是改变整个图像透明度的单个值。表面 alpha 为 255 是不透明的,值为 0 是完全透明的。

每个像素的 Alpha 值不同,因为它们存储每个像素的透明度值。这允许最精确的透明效果,但它也是最慢的。每像素 alpha 不能与表面 alpha 和颜色键混合。

所以让我们使用 colorkey 创建一个透明的 Surface 并为其添加一些文本,然后使用表面 alpha 通过调用 set_alphaSurface 来创建淡入效果:

import pygame

def main():
    screen = pygame.display.set_mode((300, 100))
    FONT = pygame.font.SysFont(None, 64)
    text = FONT.render('Hello World', False, pygame.Color('darkorange'))
    surf = pygame.Surface(text.get_rect().size)
    surf.set_colorkey((1,1,1))
    surf.fill((1,1,1))
    surf.blit(text, (0, 0))
    clock = pygame.time.Clock()
    alpha = 0
    while True:
        for e in pygame.event.get():
            if e.type == pygame.QUIT:
                return

        alpha = (alpha + 1) % 256
        surf.set_alpha(alpha)
        
        screen.fill(pygame.Color('dodgerblue'))
        screen.blit(surf, (20, 20))
        clock.tick(120)
        print(alpha)
        pygame.display.update()

if __name__ == '__main__':
    pygame.init()
    main()

【讨论】:

    【解决方案2】:

    pygame.Surface.blit() 已经做了你想做的事。它将一个表面弯曲到另一个表面,这取决于它的 Alpha 通道。您所要做的就是通过pygame.Surface.set_alpha()设置alpha通道:

    image.set_alpha(min(1.0,alpha)*255)
    

    编写一个函数,将表面“混合”到屏幕上。在下面的函数BlendSurface中,参数alpha是范围[0, 1]内表面的不透明度值。 0.0 将生成一个完全透明(不可见)的表面。 1.0 会生成一个完全不透明的表面:

    def BlendSurface(image, pos, alpha):
        image.set_alpha(min(1.0,alpha)*255)
        screen.blit(image, pos)
    

    查看简单的演示程序:

    import pygame
    import pygame.font
    pygame.init()
    
    BLUE    = (  0,   0, 255)
    YELLOW  = (255, 255,   0)
    
    size = (800,600)
    screen = pygame.display.set_mode(size)
    
    def BlendSurface(image, pos, alpha):
        image.set_alpha(min(1.0,alpha)*255)
        screen.blit(blendImage, pos)
    
    clock = pygame.time.Clock()
    
    font = pygame.font.SysFont('Times New Roman', 100)
    text = font.render('blend text', False, YELLOW)
    
    i = 0
    done = False
    while not done:
        clock.tick(60)
        i += 1
        if i > 200:
            i = 0
    
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                done = True
    
        screen.fill(BLUE)
        BlendSurface(text, (100, 100), i/200) 
        pygame.display.flip()
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-01-13
      • 2020-03-09
      • 2012-01-13
      • 1970-01-01
      • 2011-09-13
      • 2016-07-21
      • 1970-01-01
      相关资源
      最近更新 更多