문제

방금 Pygame으로 작업하기 시작했고 반 투과성 스프라이트를 만들려고 노력하고 있으며 Sprite의 소스 파일은 디스크에서로드 된 비 투명 비트 맵 파일입니다. 도움을 줄 수 있다면 소스 이미지를 편집하고 싶지 않습니다. Pygame 코드 로이 작업을 수행 할 수있는 방법이 있다고 확신하지만 Google은 나에게 도움이되지 않습니다.

도움이 되었습니까?

해결책 3

나는 원래의 질문에서 명확하지 않았을 수도 있지만, 나는 그것을 스스로 알아 냈다고 생각합니다. 내가 찾고 있던 것은 Surface의 set_alpha () 방법으로 밝혀 졌으므로 반투명 이미지가 자신의 표면에 있는지 확인하는 것입니다.

다음은 제시된 다운 코드의 예입니다.

import pygame, os.path
from pygame.locals import *

class TranslucentSprite(pygame.sprite.Sprite):
  def __init__(self):
    pygame.sprite.Sprite.__init__(self, TranslucentSprite.container)
    self.image = pygame.image.load(os.path.join('data', 'image.bmp'))
    self.image = self.image.convert()
    self.image.set_colorkey(-1, RLEACCEL)
    self.rect = self.image.get_rect()
    self.rect.center = (320,240)

def main():
  pygame.init()
  screen = pygame.display.set_mode((640,480))
  background = pygame.Surface(screen.get_size())
  background = background.convert()
  background.fill((250,250,250))
  clock = pygame.time.Clock()
  transgroups = pygame.sprite.Group()
  TranslucentSprite.container = transgroups

  """Here's the Translucency Code"""
  transsurface = pygame.display.set_mode(screen.get_size())
  transsurface = transsurface.convert(screen)
  transsurface.fill((255,0,255))
  transsurface.set_colorkey((255,0,255))
  transsurface.set_alpha(50)

  TranslucentSprite()
  while 1:
    clock.tick(60)
    for event in pygame.event.get():
      if event.type == QUIT:
        return
      elif event.type == KEYDOWN and event.key == K_ESCAPE:
        return
    transgroups.draw(transsurface)
    screen.blit(background,(0,0))
    screen.blit(transsurface,(0,0))
    pygame.display.flip()

if __name__ == '__main__' : main()

이것이 최고의 기술입니까? 가장 단순하고 간단한 것 같습니다.

다른 팁

이미지를로드 한 후에는 알파 채널을 활성화해야합니다. Surface. 그것은 이것과 비슷하게 보일 것입니다.

background = pygame.Display.set_mode()
myimage = pygame.image.load("path/to/image.bmp").convert_alpha(background)

이렇게하면 이미지를로드하고 즉시 디스플레이 표면에 알파 블렌딩에 적합한 픽셀 형식으로 변환합니다. 다른 표면을 다른 표면으로 사용할 수 있습니다.

RGB 색상 값을 위해 3- 튜플을 사용하는 함수가 있고 RGBA 색상+알파의 원하는 4tuple을 반환하는 함수가 있다고 말하면 픽셀 당 표면을 변경할 수 있습니다.

def set_alphas(color):
    if color == (255,255,0): # magenta means clear
        return (0,0,0,0)
    if color == (0,255,255): # cyan means shadow
        return (0,0,0,128)
    r,g,b = color
    return (r,g,b,255) # otherwise use the solid color from the image.

for row in range(myimage.get_height()):
    for col in range(myimage,get_width()):
        myimage.set_at((row, col), set_alphas(myimage.get_at((row, col))[:3]))

이 작업을 수행하는 또 다른 유용한 방법이 있지만, 이것이 당신에게 아이디어를 제공합니다.

이미지가 투명 해지기를 원하는 단색 배경을 가지고 있다면 COLOR_KEY 값과 Pygame은 이미지를 블리팅 할 때 투명하게 만듭니다.

예 :

color = image.get_at((0,0)) #we get the color of the upper-left corner pixel
image.set_colorkey(color)

이미지에서 직접 원하는 투명성을 수행 할 수있는 PNG 이미지 사용으로 전환하는 것을 고려할 수 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top