【问题标题】:Drawn surface transparency in pygame?在pygame中绘制表面透明度?
【发布时间】:2013-07-09 00:38:07
【问题描述】:

我正在编写一个捕食者-猎物模拟,使用 python 和 pygame 进行图形表示。我正在制作它,以便您实际上可以与生物“互动”(杀死它,选择它并跟随它环游世界等)。现在,当您单击一个生物时,一个粗圆圈(由 gfxdraw 类中的各种抗锯齿圆圈组成)环绕它,这意味着您已成功选择它。

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

你有什么建议?谢谢:)

【问题讨论】:

  • 如果您创建一个曲面,请在其上绘制圆圈 Surface.set_alpha 。然后将该表面粘贴到屏幕上。

标签: python transparency pygame


【解决方案1】:

看看下面的示例代码:

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()

【讨论】:

  • 谢谢! colorkey 完成了这项工作(尽管代码变得比我希望的更复杂)。只有一件事:您使用 pygame.event.poll 有什么特殊原因吗?干杯
  • 是的,因为我用pygame.MOUSEBUTTONDOWN 作为参数调用pygame.event.get,只检查鼠标点击事件。如果你这样做,你必须调用pygame.event.poll,否则事件队列会被填满,一段时间后窗口会变得无响应。如果你只是在没有任何参数的情况下调用pygame.event.get()(你通常在游戏中所做的),那么没有理由这样做。
  • 问题:有什么特别的理由让s 创建和设置(从s = pygame.Surface(...s.set_alpha(... 的行)在主循环内而不是之前?它们似乎是不变的,所以似乎只有xyblit 需要在那里
  • 不,完全没有特殊原因:-)
  • 只有在表面背景颜色与屏幕颜色相同的情况下才有效,例如给屏幕设置背景纹理,如何实现与表面相同的效果?需要使表面背景透明,而不是物体。例如:一个香蕉走进房子,当打开门时,香蕉会淡出。这个问题的答案是:stackoverflow.com/questions/328061/…surface = pygame.Surface((50, 50), pygame.SRCALPHA, 32) surface = surface.convert_alpha() pygame.draw.circle(...
猜你喜欢
  • 2013-09-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多