Python Pygame 游戏照明

5
我们正在制作一款2D横向卷轴游戏,游戏中的一个物品是火炬。我们有一个可以旋转的玩家手臂,我们可以获取手臂角度。我们考虑使用三角形光束形状,跟随手臂的角度。我们有几个想法,比如在整个屏幕上放置一个alpha图像,并根据手臂角度逐个删除每个像素的alpha值,但我们认为这将过于繁琐。如果您有任何想法,请不吝赐教。 谢谢。
1个回答

12

单独改变像素点的速度非常慢;只有在使用例如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

circle.png:

输入图像描述

screenshot:

输入图像描述


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接