pygame中绘制的表面透明度?

Pab*_*bce 3 python transparency pygame

我正在编写一个捕食者 - 猎物模拟使用python和pygame进行图形表示.我正在制作它,所以你可以实际上与一个生物"互动"(杀死它,选择它并在世界各地跟随它等).现在,当你点击一个生物时,一个粗圆圈(由gfxdraw类中的各种消除锯齿的圆圈组成)会吸引它,这意味着你已经成功地选择了它.

我的目标是使该圆圈透明,但根据文档,您无法为绘制的曲面设置alpha值.我已经看到了矩形的解决方案(通过创建一个单独的半透明表面,blitting它,然后在其上绘制矩形),但不是半填充圆.

你有什么建议?谢谢 :)

slo*_*oth 7

看看下面的示例代码:

import pygame

pygame.init()
screen = pygame.display.set_mode((300, 300))
ck = (127, 33, 33)
size = 25
while True:
  if pygame.event.get(pygame.MOUSEBUTTONDOWN):
    s = pygame.Surface((50, 50))

    # first, "erase" the surface by filling it with a color and
    # setting this color as colorkey, so the surface is empty
    s.fill(ck)
    s.set_colorkey(ck)

    pygame.draw.circle(s, (255, 0, 0), (size, size), size, 2)

    # after drawing the circle, we can set the 
    # alpha value (transparency) of the surface
    s.set_alpha(75)

    x, y = pygame.mouse.get_pos()
    screen.blit(s, (x-size, y-size))

  pygame.event.poll()
  pygame.display.flip()
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

  • 是的,因为我用`pygame.MOUSEBUTTONDOWN`作为参数调用`pygame.event.get`来检查鼠标点击事件.如果你这样做,你必须调用`pygame.event.poll`,否则事件队列会被填满,窗口会在一段时间后无响应.如果你只是在没有任何参数的情况下调用`pygame.event.get()`就没有理由这样做(你通常在游戏中做什么). (2认同)
  • 问题:离开`s`创建和设置的任何特殊原因(来自`s = pygame.Surface(...`直到`s.set_alpha(...`)的行在主循环内而不是之前?它们似乎不变,所以似乎只有`x`,`y`和`blit`需要在那里 (2认同)