python - PyGame 负颜色/表面
问题描述
我正在用 PyGame 创建一个游戏。在那里我想创造负面效果,所有屏幕都变成负面的。
这对于像矩形这样的简单形状非常容易:(并使用rect
而不是pygame.draw.rect
)
# set negative to 1 to activate effect
negative = 0
def rect(win, color, area, width=0):
if negative:
pygame.draw.rect(win, (255 - color[0], 255 - color[1], 255 - color[2]), area, width)
else:
pygame.draw.rect(win, color, area, width)
但我不知道如何对图像进行这种效果。我尝试做负像复制,但如果这种效果不是即时的并且会逐渐填满屏幕,那么这将无济于事。
# negative image copy
def negcopy(image):
neg = pygame.Surface(image.get_size())
for y in range(image.get_height()):
for x in range(image.get_width()):
c = image.get_at((x, y)
neg.set_at((x, y), (255 - color[0], 255 - color[1], 255 - color[2], 255))
return neg
解决方案
您可以为此 pygame.Surface.blit
使用special_flag参数BLEND_SUB
。
创建一个大小相同的全白图像并减去原始图像:
neg = pygame.Surface(image.get_size())
neg.fill((255, 255, 255))
neg.blit(image, (0, 0), special_flags=pygame.BLEND_SUB)
推荐阅读
- java - 带有 Open JDK 和 Tomcat 9.0 的 Struts 2 的 Servlet API 转换问题
- javascript - 处理节点中的请求错误
- java - Java MongoDB 驱动程序:如何更新集合中的所有文档?
- typescript - 将回调类型作为函数,接受几种可能类型之一的参数
- ansible - Ansible URI API (JSON-RPC)
- automated-tests - 能否在 HP ALM 中跟踪 TestCafe 结果?
- python - 使用 groupby 函数计算 Pandas DataFrame 中值的范围
- c# - 如何使用从 Web Api 接收的数据加载 Xamarin 表单中的选取器?
- python - 优化 dict 生成 Python 3 的嵌套 for 循环
- javascript - 如何使用 VueJS 在循环中访问嵌套对象中的属性