Python Pygame 游戏灯光

问题描述 投票:0回答:1

我正在制作一款 2D 横向卷轴游戏,游戏中的一个物品是火炬。我有一个手臂可以旋转的玩家,我们可以获取手臂的角度。我正在寻找跟随手臂角度的三角形光束形状。我有一些想法,比如在整个屏幕上放置一个 alpha 图像,并根据手臂角度单独从每个像素中删除 alpha,但我认为这太密集了。任何想法将不胜感激。

python pygame 2d lighting
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

圆.png:

enter image description here

截图:

enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.