Skip to main content
 首页 » 编程设计

Python Pygame 游戏光照

2025年05月04日33zhujiabin

我们正在制作一款 2D 横版卷轴游戏,游戏中的一个元素是火把。我们有一个 ARM 可以旋转的球员,我们可以调整 ARM 的角度。我们正在寻找一个三角形的光束形状,沿着 ARM 的角度。我们有一些想法,比如在整个屏幕上使用 alpha 图像,并根据 ARM 角度从每个像素中单独移除 alpha,但我们认为这过于密集。任何想法将不胜感激。 谢谢。

请您参考如下方法:

单独改变像素真的很慢;它仅在您使用例如numpy 来操作图像数据,此后大部分工作将在优化、编译的 C 代码中完成,而不是在 python 运行时中完成。

一种简单的方法是使用另一个 Surface 来使用不同的渲染模式(例如 BLEND_RGBA_SUB)进行此操作。

这是一个最小的例子:

import pygame 
pygame.init() 
screen=pygame.display.set_mode((640, 480)) 
light=pygame.image.load('circle.png') 
while True: 
    for e in pygame.event.get(): 
        if e.type == pygame.QUIT: break 
    else: 
        screen.fill(pygame.color.Color('Red')) 
        for x in xrange(0, 640, 20): 
            pygame.draw.line(screen, pygame.color.Color('Green'), (x, 0), (x, 480), 3) 
        filter = pygame.surface.Surface((640, 480)) 
        filter.fill(pygame.color.Color('Grey')) 
        filter.blit(light, map(lambda x: x-50, pygame.mouse.get_pos())) 
        screen.blit(filter, (0, 0), special_flags=pygame.BLEND_RGBA_SUB) 
        pygame.display.flip() 
        continue 
    break 

圆.png:

截图: