파이 게임의 프레임 속도를 더 빠르게


10

내 게임을 프로파일 링하면 취미 게임 실행 시간의 대부분이 블리치와 플립 콜 사이에 있다는 것을 알 수 있습니다. 현재 약 13fps에서만 실행됩니다. 내 비디오 카드는 꽤 괜찮은 편이므로 파이 게임에서 사용하지 않는 것 같습니다.

파이 게임에서 설정해야하는 그래픽 / 디스플레이 옵션을 아는 사람이 있습니까? 아니면 파이 게임을 선택한 이후로 살아야 할 것입니까?

답변:


12

전체 화면 모드에서 실행중인 경우 pygame.HWSURFACE디스플레이를 초기화 할 때 플래그를 사용하여 파이 게임에게 하드웨어 표면을 사용하도록 지시 할 수 있습니다. 하드웨어 표면을 사용할 수 없으면 파이 게임이 자동으로 소프트웨어 표면을 사용한다고 생각합니다.

하드웨어 표면을 사용하지 않는 경우을 사용 pygame.display.update(rectangle)하는 것이 좋습니다 pygame.display.flip(). 이렇게하면 전체 디스플레이가 아닌 지정된 사각형 만 업데이트되므로 게임에서 실제로 전체 디스플레이를 업데이트하지 않으면 성능이 약간 향상 될 수 있습니다.

하드웨어 또는 OpenGL 표면 pygame.DOUBLEBUF을 사용하는 경우 하드웨어 이중 버퍼링을 사용하는 것도 있습니다. 즉, 그리기 기능이 두 버퍼 중 하나에 그려지고 flip()표시되는 버퍼를 교체합니다.


5

파이 게임에서 하나의 병목 현상은 실제로 글꼴 렌더링입니다. 동일한 텍스트 (동일한 글꼴 / 색상)를 두 번 이상 렌더링하지 말고 렌더링 된 표면을 캐시하여 재사용해야합니다. Font.render ()를 많이 사용하는 경우 이것을 고려하십시오.


4

talljosh의 답변 외에도 몇 가지 제안을 추가하고 싶습니다.

가능한 한 회전 및 스케일링을 피하십시오. 이러한 작업은 CPU에서 순수하게 수행되며 매우 느리게 진행됩니다.

직접 픽셀 읽기 / 수정을 수행하는 경우 Surface.get_buffer()메소드를 사용 하지 말고 Surface.set_at()/get_at()메소드를 사용하여 작업하십시오 .


2

가지고있는 테스트 콘솔 출력을 주석 처리하십시오. Cody가 위에서 언급했듯이 회전과 스케일링 사이에서 출력하는 경우 특히 프레임 속도를 크게 줄일 수 있습니다.


2

Pygame이 비디오 카드의 3D 가속 기능을 사용하지 않는 것이 맞습니다. 이는 동일한 제한이있는 SDL을 기반으로하기 때문입니다. 하나 개의 대안은 같은 시스템에서 게임을 다시하는 것입니다 pyglet 않습니다 만 그래픽 비슷한 라이브러리를 찾기 위해, 또는이를 위해 OpenGL을 코드를 직접 작성, 기본적으로 OpenGL을가 스프라이트를 가속 지원합니다.


피그 릿은 훌륭합니다.
공산주의 오리

1

놀랍도록 간단한 방법 중 하나는 psyco를 사용하는 입니다. 그것이 얼마나 도움이 될지 모르겠지만 필요한 것은

 import psyco
 psyco.full()

달리기를 시작하려면 시도해 볼 수도 있습니다.


Psyco는 실제로 현대적인 관용적 파이썬 코드에는별로 도움이되지 않습니다. JIT를 원한다면 PyPy를 사용하십시오 (PyGame이 작동하는지 확실하지 않습니다).
coderanger

Pygame은 PyPy에서 작동하지 않지만 Pyglet은 작동합니다.
coderanger
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.