2014-06-22 5 views
0

이 이상한 일은 Pygame1.9.1의 글꼴 모듈에서 발생했습니다. .get_linesize()은 글자 높이 (줄 당 높이 만 제외하고)가 1보다 큰 글꼴의 경우 1을 반환합니다. .fon 글꼴에서만 발생합니다.get_linesize()가 .fon 글꼴에 대해 1을 잘못 반환하는 이유는 무엇입니까?

여기에는 두 가지 예가 있으며 이 작동하는 세 번째 글꼴이 제어용으로 사용됩니다. IDLE의 쉘에서 이걸 실행했지만 적절한 모듈을 가지고도 똑같은 일이 발생합니다. 어쨌든 파이 게임이 이미 초기화되었습니다. get_linesize() 미적 이유로 선 사이의 간극을 포함하기 때문에

>>> testfont = pygame.font.Font("C:/Windows/Fonts/vga850.fon", 12) 
>>> testfont.get_linesize() # This one returns 1. For 'Terminal Regular' 
1 
>>> otherfont = pygame.font.Font("C:/Windows/Fonts/vgafix.fon", 18) 
>>> otherfont.get_linesize() # This also returns 1. For 'Fixedsys Regular' 
1 
>>> lastfont = pygame.font.Font("C:/Windows/Fonts/OCRAStd.otf", 24) 
>>> lastfont.get_linesize() # This returns the correct value. For 'OCR A Std Regular' 
29 
>>> textsurf = testfont.render("This is a nightmare!", True, (0,0,0)) 
>>> textsurf.get_size()[1] # Let's get the height of this surface... 
12 
>>> othersurf = otherfont.render("An inescapable nightmare!", False, (0,0,0)) 
>>> othersurf.get_size()[1] # This one, too. Antialiasing makes no difference. 
15 
>>> lastsurf = lastfont.render("You're okay, OCRA.", True, (0,0,0)) 
>>> lastsurf.get_size()[1] # And finally, the control... 
25 

상기 제어 렌더링의 높이가 조금 짧다. <Font>.size("sample string")[1]이 올바로 작동하므로 줄 높이가 제자리를 찾지 못했습니다.

세 글꼴이 모두 올바르게 렌더링됩니다. 대신 .size('sample')[1] + some_adjustment를 사용합니다

<Font>.get_linesize()에 제대로 반응하지 않는 글꼴을 가진 공통점은 모두가 공유 확장 .fon, 너무 쉬운 '솔루션'.FON 글꼴 .get_linesize()를 사용하지 마십시오 ", 단순히이다 . " 그러나 이것은 다소 지저분하고 (여전히 더 심합니다!) 몹시 지루하고 지루하고, 이 문제의 원인은이고 이면이 글꼴을 get_linesize()과 같이 작동시키는 방법입니다. .

필자는 파이 게임의 설명서를 살펴본 결과이 문제와 관련이 없으며 많은 웹 검색 결과도 도움이되지 않음이 입증되었습니다.

답변

0

파이 게임의 FontSDL_ttf에 따라 달라지며 이는 freetype2에 달려 있습니다. 폰트가 그 레이어들 (특히 SDL_ttf 레이어, freetype2는 폰트 데이터를 읽음)을 통과 할 때 라인 높이의 값을 계산할 때 문제가 있다고 생각됩니다.

pygame.Font 대신 pygame.freetype.Font을 사용하는 것이 좋습니다. freetype 모듈은 SDL_ttf 레이어를 건너 뛰고 freetype으로 직접 작동합니다. 글꼴에 대한 옵션 집합은 a much richer입니다. get_linesize() 대신에 get_sized_height()을 사용하려고합니다.

그래도 작동하지 않는다면 FON 파일을 읽는 중 freetype 버그 일 가능성이 높습니다. 그렇지 않으면 FON 파일 자체의 값이 올바르게 설정되지 않았을 수 있습니다.

+0

실제로 freetype으로 가려고했지만 실제로 Python1.9.1을 사용하고 있습니다. 내가 처음 모듈을 고려했을 때, 의사는 실험적이었고 예측할 수 없게 바뀔 수도 있고 모두 사라질 수도있어서 차가워 져서 혼자 남겨 두었다고했습니다. (지난 달) 시간이 바뀌었지만 업데이트해야합니다. – Augusta

관련 문제