2012-03-27 2 views
0

64 비트 win7에서 파이 게임 2.7.1과 파이 게임 1.9.1을 사용하고 있습니다. 내 배경을 그릴 때 http://www.pygame.org/wiki/GradientCode의 그라디언트 코드를 사용하고 있습니다. 다음과 같이 텍스트를 표시합니다.파이 게임에서 그라데이션 배경에 텍스트를 다시 그리는 방법은 무엇입니까?

countText = font.render("%d" % secs_left, 1, (255, 0, 0)) 
countRect = countText.get_rect() 
countRect.y, countRect.centerx = yPos, screen.get_rect().width/2 
screen.blit(countText, countRect) 
pygame.display.flip() 

카운트 다운 타이머를 표시하는 데이 방법을 사용하지만 문제는 숫자가 서로 위에 표시된다는 것입니다. 이 문제를 해결할 font.render() 호출에 배경색을 지정할 수 있지만 단색 배경이 그라디언트 배경과 일치하지 않는 또 다른 문제가 발생합니다.

그라데이션 배경 복사본을 다른 표면에 저장하고 다음 번호를 그리기 전에 저장된 표면의 관련 부분을 배경에 그려서 해결할 수 있다고 생각하지만이 작업을 수행하는 방법을 잘 모르겠습니다. .

나는이 같은 그라데이션 배경의 사본을 저장할 수 있습니다

# save a surface with same size and gradient as background 
bg_image = pygame.Surface(screen.get_size()) 
fill_gradient(bg_image, BG_COLOR, GRADIENT_COLOR) 

을하지만 어떻게 내가 bg_image의 관련 부분을 선택하고 내 메인 화면 배경으로 그릴 수 있습니까? 나는 시도하고 새 번호를 블럭 전송하기 전에 현재 카운트 번호를 삭제하는 screen.blit을()하고, 이런 식으로 뭔가를 시도했지만 작동하지 않습니다 :

countText = usefont.render("%d" % secs_left, 1, (255, 0, 0)) 
countRect = countText.get_rect() 
countRect.y, countRect.centerx = yPos, screen.get_rect().width/2 
screen.blit(bg_image, (0,0), countRect) 
screen.blit(countText, countRect) 
pygame.display.flip() 

이것이 가장 좋은 방법이 될 것인가 (코드 그 작품)? 아니면 이것을 할 수있는 더 좋은 방법이 있습니까?

도움 주셔서 감사합니다.

답변

0

나는 Surface.set_clip()가 카운트 다운 텍스트가 포함 된 단지 사각형으로 업데이트되는 영역을 제한하는 데 사용할 수 있습니다 bg_surface 블리 팅 때

countText = usefont.render("%d" % secs_left, 1, (255, 0, 0)) 
countRect = countText.get_rect() 
countRect.y, countRect.centerx = yPos, screen.get_rect().width/2 
screen.set_clip(countRect)  # Allow updates only to area in countRect 
screen.blit(bg_image, (0,0))  # bg_img will only be drawn within countRect 
screen.blit(countText, countRect) 
pygame.display.flip() 
0
  • pygame.display.set_mode(size, 0, 32)을 사용하면 화면을 투명하게 유지할 수 있습니다.
  • 당신의 배경을 저장 표면을 사용하여, 우리는 이름이 txt_surface
  • pygame.display.flip() 전마다의 bg_surface 다음 txt_surfacescreen에 블럭 전송하면, 그것은 bg_surface
  • 당신은 새로운 텍스트면 당신이 font.render 할 때마다 얻을 이름 .

필요한 게 맞습니까? 카운터를 렌더링하는 경우 모든 프레임을 모든 프레임에 블리트 (blit)하는 것이 좋습니다.

+0

이 모든 것을 지워집니다. 카운트 다운 텍스트 영역 만 지우고 싶습니다. 나는 카운트 다운 텍스트뿐만 아니라 화면에 다른 것들을 가지고있다. – dcr

+0

그러면'Surface.subsurface (rect)'메서드를 사용하여'bg_surface'의 일부만 얻을 수 있습니다. – Ray

관련 문제